添加vn.rpc模块中使用cPickle作为序列化工具
This commit is contained in:
parent
c57d8c9d26
commit
cbfdae09a6
@ -34,10 +34,13 @@ shared_ptr.h和SoftDollerTier.h中加入了对象比较函数的代码,用于
|
||||
3. vn.ib/build/lib下的vnib.so复制到vn.ib/test文件夹下,运行test.py
|
||||
4. 会出现上面的undefined symbol错误
|
||||
|
||||
更新:编译问题已解决,需要在EClient.h和EClient.cpp中,加入EncodeField<const char*>这一对EncodeField<T>的偏特化实现(well,我并不十分确定是否该用“偏特化”这个词),具体请参考linux文件夹下的代码。
|
||||
|
||||
但目前Linux下的编译在调用eConnect函数时会卡住,从TWS中查看会有API发起的连接处于“pending”的状态,猜测问题可能出在底层的POSIX线程锁相关的地方。
|
||||
|
||||
### API版本
|
||||
版本:IB API for Windows beta 9.72.18
|
||||
|
||||
日期:2016-09-14
|
||||
|
||||
链接:[http://interactivebrokers.github.io/](http://interactivebrokers.github.io/)
|
||||
|
||||
|
@ -8,6 +8,10 @@ import zmq
|
||||
from msgpack import packb, unpackb
|
||||
from json import dumps, loads
|
||||
|
||||
import cPickle
|
||||
pDumps = cPickle.dumps
|
||||
pLoads = cPickle.loads
|
||||
|
||||
|
||||
# 实现Ctrl-c中断recv
|
||||
signal.signal(signal.SIGINT, signal.SIG_DFL)
|
||||
@ -18,12 +22,14 @@ class RpcObject(object):
|
||||
"""
|
||||
RPC对象
|
||||
|
||||
提供对数据的序列化打包和解包接口,目前提供了json和msgpack两种工具。
|
||||
提供对数据的序列化打包和解包接口,目前提供了json、msgpack、cPickle三种工具。
|
||||
|
||||
msgpack:性能更高,但通常需要安装msgpack相关工具;
|
||||
json:性能略低但通用性更好,大部分编程语言都内置了相关的库。
|
||||
cPickle:性能一般且仅能用于Python,但是可以直接传送Python对象,非常方便。
|
||||
|
||||
因此建议尽量使用msgpack,如果要和某些语言通讯没有提供msgpack时再使用json。
|
||||
因此建议尽量使用msgpack,如果要和某些语言通讯没有提供msgpack时再使用json,
|
||||
当传送的数据包含很多自定义的Python对象时建议使用cPickle。
|
||||
|
||||
如果希望使用其他的序列化工具也可以在这里添加。
|
||||
"""
|
||||
@ -32,7 +38,8 @@ class RpcObject(object):
|
||||
def __init__(self):
|
||||
"""Constructor"""
|
||||
# 默认使用msgpack作为序列化工具
|
||||
self.useMsgpack()
|
||||
#self.useMsgpack()
|
||||
self.usePickle()
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
def pack(self, data):
|
||||
@ -63,6 +70,16 @@ class RpcObject(object):
|
||||
def __msgpackUnpack(self, data):
|
||||
"""使用msgpack解包"""
|
||||
return unpackb(data)
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
def __picklePack(self, data):
|
||||
"""使用cPickle打包"""
|
||||
return pDumps(data)
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
def __pickleUnpack(self, data):
|
||||
"""使用cPickle解包"""
|
||||
return pLoads(data)
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
def useJson(self):
|
||||
@ -75,6 +92,12 @@ class RpcObject(object):
|
||||
"""使用msgpack作为序列化工具"""
|
||||
self.pack = self.__msgpackPack
|
||||
self.unpack = self.__msgpackUnpack
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
def usePickle(self):
|
||||
"""使用cPickle作为序列化工具"""
|
||||
self.pack = self.__picklePack
|
||||
self.unpack = self.__pickleUnpack
|
||||
|
||||
|
||||
########################################################################
|
||||
|
Loading…
Reference in New Issue
Block a user