Параллельное программирование с использованием многопроцессорной обработки Python и процесса defunc

У меня проблема с созданием параллельной программы с использованием многопроцессорности. Насколько я знаю, когда я запускаю новый процесс с использованием этого модуля (многопроцессорность), я должен сделать «os.wait ()» или «childProcess.join ()», чтобы получить его статус выхода. Но размещение вышеуказанных функций в моей программе может привести к остановке основного процесса, если что-то случится с дочерним процессом (и дочерний процесс зависнет).

Проблема в том, что если я этого не сделаю, дочерние процессы станут зомби (и будут перечислены как что-то вроде «python ‹ прекративший существование>» в верхнем списке).

Есть ли способ избежать ожидания завершения дочерних процессов и избежать создания процессов-зомби и\или не беспокоить основной процесс так много о его дочерних процессах?


person silverado    schedule 21.07.2010    source источник


Ответы (2)


Хотя ответ ars должен решить ваши насущные проблемы, вы можете подумать о том, чтобы взглянуть на сельдерей: http://ask.github.com/celery/index.html. Это относительно удобный для разработчиков подход к достижению этих и других целей.

person Profane    schedule 03.12.2010

Возможно, вам придется предоставить дополнительную информацию или фактический код, чтобы понять это. Вы ознакомились с документацией, в частности разделами с пометкой "Предупреждение"? Например, вы можете столкнуться с чем-то вроде этого:

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

Это означает, что если вы попытаетесь присоединиться к этому процессу, вы можете получить взаимоблокировку, если не уверены, что все элементы, помещенные в очередь, были использованы. Точно так же, если дочерний процесс не демонический, то родительский процесс может зависнуть при выходе, когда он попытается присоединиться ко всем своим недемоническим дочерним процессам.

Обратите внимание, что очередь, созданная с помощью менеджера, не имеет этой проблемы. См. Руководство по программированию.

person ars    schedule 21.07.2010