Я хочу поделиться многопроцессорным списком, словарем и переменной через многопроцессорность. Я могу кодировать и использовать их, если я отправлю эти 3 в качестве отдельного аргумента для функции, которую я хочу многопроцессорным. Но как только я использую многопроцессорный словарь или обычный словарь для хранения этих трех общих объектов, а затем отправляю этот словарь в качестве одного аргумента в функцию. Я получаю RuntimeError: общие объекты должны быть разделены только с использованием Inheritance
import multiprocessing as mp
from multiprocessing.sharedctypes import Value
def final(D):
if 0 not in D["first"][0]:
D["first"][0].update({0:D["first"][2]})
num = D["first"][2].value
D["first"][2].value+=1
if D["first"][2].value ==3:
D["first"][2].value=0
else:
num = D["first"][2].value
print("num is {}".format(num))
if __name__ == '__main__':
l=mp.Manager().list(range(5))
v=Value("i",0)
d= mp.Manager().dict()
D= mp.Manager().dict()
# D={}
D.update({"first": [d,l,v]})
p= mp.Process(target=final,name = "process", args=(D,))
p.start()
p.join()
Это ошибка, которую я получаю
Process process:
Traceback (most recent call last):
File "/usr/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap
self.run()
File "/usr/lib/python2.7/multiprocessing/process.py", line 114, in run
self._target(*self._args, **self._kwargs)
File "test.py", line 58, in d_final
D["first"][0].update({0:D["first"][2]})
File "<string>", line 2, in update
File "/usr/lib/python2.7/multiprocessing/managers.py", line 758, in _callmethod
conn.send((self._id, methodname, args, kwds))
File "/usr/lib/python2.7/multiprocessing/sharedctypes.py", line 218, in __reduce__
assert_spawning(self)
File "/usr/lib/python2.7/multiprocessing/forking.py", line 52, in assert_spawning
' through inheritance' % type(self).__name__
RuntimeError: Synchronized objects should only be shared between processes through inheritance
Как я могу сделать вышеупомянутое, поскольку мне нужно хранить несколько многопроцессорных словарей, списков и переменных в словаре, который я могу разделить между процессами.
Словарь должен выглядеть так: -
D= { "first":[d,l,v] , "second":[d,l,v], "third":[d,l,v] ....... }