многопроцессорная передача Python от дочернего процесса до родительского - PullRequest
3 голосов
/ 20 декабря 2011

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

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

Используя многопроцессорный модуль и метод Queue, как мне передать переменную из parseContents обратно в main для использования после строки 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()

Нужно ли передавать переменную / экземпляр 'queue' в мою функцию parseContents после вызова ее в моем main, чтобы дочерний процесс знал об очереди?

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

1 Ответ

1 голос
/ 20 декабря 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...