2016-08-30 2 views
1

Я хотел бы иметь основной процесс 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 так все в том же объеме, то он работает отлично.

ответ

2

попытка поставить свой код за

if __name__ == "main":

, например:

if __name__ == "__main__": 
    man = Manager() 
    d = man.dict() 
    proc = Process(target=worker, args=(d,)) 
Смежные вопросы