python multiprocessing manager.dict()正在阻塞

时间:2016-08-30 16:21:32

标签: python python-3.x python-multiprocessing

我希望有一个主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的底部,那么所有内容都在同一范围内,那么它可以正常工作。

1 个答案:

答案 0 :(得分:2)

尝试将代码置于

之后

if __name__ == "main":

例如:

if __name__ == "__main__":
    man = Manager()
    d = man.dict()
    proc = Process(target=worker, args=(d,))