VeighNa量化社区
你的开源社区量化交易平台 | vn.py | vnpy
Member
加入于:
帖子: 21
声望: 0

想实现2个进程独立执行两个策略,共享数据用的是manager = multiprocessing.Manager() 然后构建了一把锁lock = multiprocessing.Lock() ,启动时出现了报错:
Traceback (most recent call last):
File "D:\tlm_code\bid_ask_multiprocess\bid_ask_multiprocess.py", line 1639, in <module>
main()
File "D:\tlm_code\bid_ask_multiprocess\bid_ask_multiprocess.py", line 1628, in main
p.start()
File "D:\python\python_3.10.2\lib\multiprocessing\process.py", line 121, in start
self._popen = self._Popen(self)
File "D:\python\python_3.10.2\lib\multiprocessing\context.py", line 224, in _Popen
return _default_context.get_context().Process._Popen(process_obj)
File "D:\python\python_3.10.2\lib\multiprocessing\context.py", line 327, in _Popen
return Popen(process_obj)
File "D:\python\python_3.10.2\lib\multiprocessing\popen_spawn_win32.py", line 93, in init
reduction.dump(process_obj, to_child)
File "D:\python\python_3.10.2\lib\multiprocessing\reduction.py", line 60, in dump
ForkingPickler(file, protocol).dump(obj)
TypeError: cannot pickle '_thread.lock' object

似乎是跟线程的lock冲突了吗,如何解决这个问题呢,感谢!!!

Member
avatar
加入于:
帖子: 1834
声望: 140

跨进程能够传递的数据,是比较扁平化的简单Python结构,所有涉及操作系统线程管理相关的对象(Lock、Condition等)都无法传递

Member
加入于:
帖子: 21
声望: 0

MTF wrote:

跨进程能够传递的数据,是比较扁平化的简单Python结构,所有涉及操作系统线程管理相关的对象(Lock、Condition等)都无法传递

进程顺利启动了,是我共享的数据不能pickle,但是遇到一个奇怪的问题,我在每个进程里面单独注册了引擎,但是on_order返回的单子还有其他进程的,这是什么原因导致的,我感觉我已经做到了隔离

Member
加入于:
帖子: 21
声望: 0

MTF wrote:

跨进程能够传递的数据,是比较扁平化的简单Python结构,所有涉及操作系统线程管理相关的对象(Lock、Condition等)都无法传递
找到问题了,A进程发出的单子,形成的订单号会给所有进程广播,虽然每个进程的网关不一样,所以需要用前置+会话进行过滤

© 2015-2022 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

【用户协议】
【隐私政策】
【免责条款】