2011-12-20 2 views
2

У меня есть функция подпроцесса (называемые parseContents), который вызывается с помощью следующего кода:питона многопроцессорной проход ДИКТ от детского процесса обратно к родителю

def main(): 
    p = Process(target=parseContents, args=(event.name,)) 
    p.start() 
    p.join() 

Используя модуль многопроцессорного и метод очереди, как я пошел бы о передаче переменной из parseContents на главную, которая будет использоваться после строки p.join()?

Я прочитал, что я хотел бы использовать:

from multiprocessing import Queue 
    queue = Queue() 
    queue.put(myVar) #obviously this would be inside parseContents() 
    print queue.get(myVar) #obviously this would be inside main() 

Мне нужно передать переменную «очередь»/экземпляр моей функции parseContents после вызова его в мой основной Делайте это процесс ребенок знает о очереди ?

Какова была бы правильная реализация многопроцессорной очереди между родительским и дочерним процессами, построенная в сегменте main(): выше?

ответ

1

Чтобы использовать очередь таким образом, вы должны создать экземпляр в main() и передать его в parseContents в качестве аргумента. После этого вы сможете использовать код, который у вас есть (в правильных местах), чтобы передать элемент из дочернего процесса в родительский процесс.

Документы Python предупреждают, что вы не должны пытаться присоединиться к дочернему процессу, если очередь не пуста, поэтому перед вызовом join убедитесь, что все элементы вышли из очереди. Фактически, вы должны иметь возможность запускать код без вызова join, потому что queue.get будет ждать, пока в очереди не появится элемент.

+0

Я ничего не вижу в документах об удалении или опорожнении очереди. Как мне это сделать до вызова .join()? – sadmicrowave

+0

Я просто имел в виду, что элемент, который вы должны вызвать, получает достаточно времени, чтобы вытащить все предметы из очереди, прежде чем вы вызовете соединение. – murgatroid99

+0

oh gotcha! если я помещу только 1 элемент в очередь, тогда мне нужно только вывести 1 элемент. Я понимаю, спасибо, – sadmicrowave

Смежные вопросы