Я хотел бы иметь основной процесс python для создания дочернего процесса, который постоянно обновляет объект (Node). Объект должен быть доступен как из основного процесса, так и из дочернего процесса. Как только я добавляю экземпляр объекта Node к экземпляру manager.dict() при попытке извлечь объект Node из него, основной процесс блокируется. Ниже приведен упрощенный код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 просто использую примитивное значение, например. increment int, он отлично работает.
Update Если переместить код из run.py
в нижней части test.py
так все в том же объеме, то он работает отлично.