添加vn.rpc模块中使用cPickle作为序列化工具

This commit is contained in:
chenxy123 2016-11-14 22:54:29 +08:00
parent c57d8c9d26
commit cbfdae09a6
2 changed files with 30 additions and 4 deletions

View File

@ -34,10 +34,13 @@ shared_ptr.h和SoftDollerTier.h中加入了对象比较函数的代码用于
3. vn.ib/build/lib下的vnib.so复制到vn.ib/test文件夹下运行test.py 3. vn.ib/build/lib下的vnib.so复制到vn.ib/test文件夹下运行test.py
4. 会出现上面的undefined symbol错误 4. 会出现上面的undefined symbol错误
更新编译问题已解决需要在EClient.h和EClient.cpp中加入EncodeField<const char*>这一对EncodeField<T>的偏特化实现well我并不十分确定是否该用“偏特化”这个词具体请参考linux文件夹下的代码。
但目前Linux下的编译在调用eConnect函数时会卡住从TWS中查看会有API发起的连接处于“pending”的状态猜测问题可能出在底层的POSIX线程锁相关的地方。
### API版本 ### API版本
版本IB API for Windows beta 9.72.18 版本IB API for Windows beta 9.72.18
日期2016-09-14 日期2016-09-14
链接:[http://interactivebrokers.github.io/](http://interactivebrokers.github.io/) 链接:[http://interactivebrokers.github.io/](http://interactivebrokers.github.io/)

View File

@ -8,6 +8,10 @@ import zmq
from msgpack import packb, unpackb from msgpack import packb, unpackb
from json import dumps, loads from json import dumps, loads
import cPickle
pDumps = cPickle.dumps
pLoads = cPickle.loads
# 实现Ctrl-c中断recv # 实现Ctrl-c中断recv
signal.signal(signal.SIGINT, signal.SIG_DFL) signal.signal(signal.SIGINT, signal.SIG_DFL)
@ -18,12 +22,14 @@ class RpcObject(object):
""" """
RPC对象 RPC对象
提供对数据的序列化打包和解包接口目前提供了json和msgpack两种工具 提供对数据的序列化打包和解包接口目前提供了jsonmsgpackcPickle三种工具
msgpack性能更高但通常需要安装msgpack相关工具 msgpack性能更高但通常需要安装msgpack相关工具
json性能略低但通用性更好大部分编程语言都内置了相关的库 json性能略低但通用性更好大部分编程语言都内置了相关的库
cPickle性能一般且仅能用于Python但是可以直接传送Python对象非常方便
因此建议尽量使用msgpack如果要和某些语言通讯没有提供msgpack时再使用json 因此建议尽量使用msgpack如果要和某些语言通讯没有提供msgpack时再使用json
当传送的数据包含很多自定义的Python对象时建议使用cPickle
如果希望使用其他的序列化工具也可以在这里添加 如果希望使用其他的序列化工具也可以在这里添加
""" """
@ -32,7 +38,8 @@ class RpcObject(object):
def __init__(self): def __init__(self):
"""Constructor""" """Constructor"""
# 默认使用msgpack作为序列化工具 # 默认使用msgpack作为序列化工具
self.useMsgpack() #self.useMsgpack()
self.usePickle()
#---------------------------------------------------------------------- #----------------------------------------------------------------------
def pack(self, data): def pack(self, data):
@ -63,6 +70,16 @@ class RpcObject(object):
def __msgpackUnpack(self, data): def __msgpackUnpack(self, data):
"""使用msgpack解包""" """使用msgpack解包"""
return unpackb(data) return unpackb(data)
#----------------------------------------------------------------------
def __picklePack(self, data):
"""使用cPickle打包"""
return pDumps(data)
#----------------------------------------------------------------------
def __pickleUnpack(self, data):
"""使用cPickle解包"""
return pLoads(data)
#---------------------------------------------------------------------- #----------------------------------------------------------------------
def useJson(self): def useJson(self):
@ -75,6 +92,12 @@ class RpcObject(object):
"""使用msgpack作为序列化工具""" """使用msgpack作为序列化工具"""
self.pack = self.__msgpackPack self.pack = self.__msgpackPack
self.unpack = self.__msgpackUnpack self.unpack = self.__msgpackUnpack
#----------------------------------------------------------------------
def usePickle(self):
"""使用cPickle作为序列化工具"""
self.pack = self.__picklePack
self.unpack = self.__pickleUnpack
######################################################################## ########################################################################