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
底部,所以一切都在相同的范围内,那么它工作正常。