2016-04-28 1 views
-1

Мне нужно создать дочерний процесс в главном приложении, которое обновляет dict каждые n секунд.Python: дочерний процесс для обновления глобальных ресурсов, используемых родителем

Этот словарь будет использоваться родительским процессом как глобальная переменная.

Вот псевдо-код, что я пытаюсь сделать:

dict_ = {"a":12,"b":23} 


def child_process() 
    global dict_ 
    while True: 
     # update dict_ 
     time.sleep(n) 

def parent_process(): 
    global dict_ 
    # use dict_ WITHOUT MODIFYING IT 

if __name__ == '__main__': 
    # 1- run child process 
    # 2- run parent process 

Я нашел много о многопроцессорных но я сталь не могу понять, как я могу это сделать.

+0

Что вы имеете в виду, не изменяя его? Просто не изменяйте его? – Natecat

+0

Просто читайте 'a' и' b', но не изменяя dict ... Так что 'child_process' будет изменять dict_ и' parent_process' будет просто использовать эти свежие данные – farhawa

+1

[Google перед запросом] (https: //docs.python .org/2/library/multiprocessing.html # multiprocessing.Value) – Natecat

ответ

1

В общем случае мы используем queue в многопроцессорной или потоковой передаче для обмена данными или результатами. Однако для python используются конструкции, такие как list и dictManagers. Пожалуйста, найдите здесь ваше требование:

from multiprocessing import Process, Manager 

dict_ = Manager().dict({"a":12,"b":23}) 

def child_process(_dict): 
    while _dict['b'] < 30: 
     _dict['b'] += 1 

if __name__ == '__main__': 
    proc = Process(target=child_process, args=(dict_,)) 
    proc.start() 
    # Here output printed is value from 23 to 30. 
    # while proc.is_alive(): 
    #  print dict_.get("b") 
    proc.join() 
    print dict_.get("b") # prints 30