2017-02-17 15 views
0

Я хочу поделиться с некоторыми переменными Event() внутри него между родительским и дочерним процессами, но не знаю, как это сделать. Обратите внимание, что мне нужно добавить или удалить (ключ, значение) после запуска процесса. Кажется, что ни нормальный dict, ни multiprocessing.Manager.dict, как показано ниже, не могут удовлетворить мои требования.Python, совместно использующий dict с переменными Event() внутри него между родительскими и дочерними процессами

import time 
from multiprocessing import Process, Event, Manager 

manager = Manager() 
d1 = manager.dict() 
# d1 = dict() 

def fun(): 
    # do something and then set d1[1] 
    time.sleep(4) 
    d1[1].set() 

p = Process(target=fun, name='fun') 
p.start() 
d1[1] = Event() # add a (key, value) after the process is defined 
p.join() 
print 'After fun, d1[1] = %s' % (d1[1].is_set()) 

Итак, каков правильный способ обмена этими семафорами между родительскими и дочерними процессами?

ответ

0

Заменить

d1[1] = Event() 

с

d1[1] = manager.Event() 
+0

Это не помогает. Я получаю сообщение RemoteError «Unserializable message: (« #RETURN », )». – nicklhy

+0

Пожалуйста, дважды проверьте и добавьте 'if __name__ == '__main __':' после того, как вы определите 'fun' – Udi

+0

Этот код разбился с тем же сообщением об ошибке на моем ноутбуке. Кстати, я использую Python2.7. – nicklhy