2013-02-11 2 views
0

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

Работник непрерывно проверяет, жив ли родитель. Проблема в том, что когда я убиваю родительский процесс из командной строки, все работники убиваются, кроме одного. Процесс регистрации также завершается. Я не знаю, почему один процесс продолжает выполняться. Это из-за каких-либо блокировок и т. Д. В очереди? Как правильно выйти в этом сценарии? Я использую

sys.exit(0) 

для выхода.

ответ

0

Я бы использовал sys.exit(0) только если нет других шансов. Всегда лучше очищать каждую нить/процесс. В вашем Процессе у вас будет цикл while. Так что просто делайте break там, чтобы он смог подойти к концу.

Убирайте перед тем, как уйти, т. Е. Отпустите все ручки внешних ресурсов, например файлов, сокетов, труб.

Где-то в этих ручках может быть причиной поведения, которое вы видите.

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