2013-06-20 3 views
2

Я создаю отдельный процесс обработки моих облачных сервисов. Я spawnb это так:share dict между процессами

CldProc = Process(target=CloudRun) 
CldProc.start() 

и мне интересно, если я могу иметь общий словарь между этой CloudProc и моим текущим основным процессом?

EDIT: В качестве альтернативы я имею в виду использовать рассол, чтобы сбросить свои данные в файл из процесса и загрузить его обратно, это требует, чтобы я использовал присоединиться(), чтобы ждать завершения процесса и выхода.

второго EDIT Итак, теперь у меня есть мой ДИКТ объявлен как mac_dict = {}, а затем заливает его в моем подпроцессе и хочет получить доступ к нему в моем основном процессе. Теперь я просто пробовал:

>>> dict = dict() 
>>> dict['A'] = 1 
>>> print dict 
{'A': 1} 

Так как же Python знает, что dict() следует вызывать из Менеджеров? Есть ли какие-нибудь примеры, которыми я могу следовать?

ответ

5

Понял, чтобы упростить, я сделал это так:

from multiprocessing import Process, Manager 

def myf(myd): 
    myd[1] = "HELLO WORLD!" 

def proc(d): 
    myf(d) 

m=Manager() 
locdict=m.dict() 
locdict[2] = "HI BUDDY!" 

p = Process(target=proc, args=(locdict,)) 

p.start() 
p.join() 
print locdict 
+0

Рад помочь ... Я был просто придумать пример, но вы, кажется, Получил это. –

+0

Здесь стоит отметить, что вам не нужно передавать locdict в целевую функцию proc. Функция myf с успехом изменит locdict, если вы просто сделали locdict [1] = 'blah' из своего тела. – Totem

3

Посмотрите на multiprocessing.Manager и на метод Manager.dict() в частности. Они могут удовлетворить ваши потребности.

+0

смотрите мой второй править выше – cerr