我希望有一个主python进程来创建一个持续更新对象(Node)的子进程。需要从主进程和子进程访问对象。在尝试从中检索Node对象时,我将我的Node对象的实例添加到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
的底部,那么所有内容都在同一范围内,那么它可以正常工作。
答案 0 :(得分:2)
尝试将代码置于
之后 if __name__ == "main":
例如:
if __name__ == "__main__":
man = Manager()
d = man.dict()
proc = Process(target=worker, args=(d,))