1
我想有主要的Python進程來創建一個子進程,連續更新一個對象(節點)。一個對象需要可以從主進程和子進程訪問。一旦我嘗試從它中檢索Node對象時,將我的Node對象的實例添加到manager.dict()的實例中,主進程就會被阻止。 下面是一個簡單的代碼python multiprocessing manager.dict()阻止
test.py
from multiprocessing import Process, Manager
import time
class Node(object):
def __init__(self, host):
self.host = host
self.refreshed = 0
def refresh(self):
self.refreshed = int(time.time())
def __repr__(self):
return 'Node host:%s' % (self.host,)
man = Manager()
d = man.dict()
def worker(d):
while True:
node = d['n1']
node.refresh()
d['n1'] = node
time.sleep(3)
proc = Process(target=worker, args=(d,))
run.py
import test
test.d['n1'] = test.Node('localhost')
test.proc.start()
如果我放棄在這裏解釋器做test.d.items()
它會阻止。
更新 如果我改變了代碼而不是Node實例只是使用原始值,例如,增加一個int,它工作正常。
更新 如果我從run.py
移動代碼的test.py
底部,所以一切都在相同的範圍內,那麼它工作正常。