我有一个相当复杂的Python对象,我需要在多个进程之间共享.我使用启动这些过程multiprocessing.Process.当我分享一个对象multiprocessing.Queue,并multiprocessing.Pipe在其中,他们共享就好了.但是当我尝试与其他非多处理模块对象共享一个对象时,似乎Python会分叉这些对象.真的吗?
我尝试使用multiprocessing.Value.但我不确定应该是什么类型的?我的对象类叫做MyClass.但是当我尝试时multiprocess.Value(MyClass, instance),它失败了:
TypeError: this type has no size
知道发生了什么事吗?
模块状态的 Python 文档multiprocessing:
版本 3.6 中的更改:共享对象可以嵌套。例如,共享容器对象(例如共享列表)可以包含其他共享对象,这些对象都将由
SyncManager.
这确实适用于list和dict。Queue但是,如果我尝试在共享内创建共享dict,则会收到错误:
>>> from multiprocessing import Manager
>>> m = Manager()
>>> d = m.dict()
>>> d['a'] = m.list()
>>> d['b'] = m.dict()
>>> d['c'] = m.Queue()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 2, in __setitem__
File "/usr/lib/python3.6/multiprocessing/managers.py", line 772, in _callmethod
raise convert_to_error(kind, result)
multiprocessing.managers.RemoteError:
---------------------------------------------------------------------------
Traceback (most recent call last):
File "/usr/lib/python3.6/multiprocessing/managers.py", …Run Code Online (Sandbox Code Playgroud)