gpt4 book ai didi

python multiprocessing manager.dict() 阻塞

转载 作者:行者123 更新时间:2023-12-01 03:43:53 28 4
gpt4 key购买 nike

我希望有一个主要的 python 进程来创建一个持续更新对象(节点)的子进程。一个对象需要可以从主进程和子进程访问。一旦我在尝试从中检索 Node 对象时将 Node 对象的实例添加到 manager.dict() 的实例中,主进程就会被阻止。下面是一个简化的代码

测试.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 的底部,这样所有内容都在同一范围内,那么它就可以正常工作。

最佳答案

尝试将代码放在后面

如果 __name__ == "main":

例如:

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

关于python multiprocessing manager.dict() 阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39232574/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com