отключение «присоединения», когда процесс останавливается - PullRequest
1 голос
/ 18 февраля 2010

Есть ли способ остановить multiprocessing модуль Python от попытки вызова и ожидания join() при завершении дочерних процессов родительского процесса?

2010-02-18 10:58:34,750 INFO calling join() for process procRx1

Я хочу, чтобы процесс, в который я отправил SIGTERM, завершился как можно быстрее (т. Е. «Быстро провалился») вместо того, чтобы ждать несколько секунд, прежде чем окончательно отказаться от попытки join.

Пояснения : У меня есть "центральный процесс", который создает группу "дочерних процессов". Я ищу способ аккуратно обработать сигнал «SIGTERM» от любого процесса, чтобы обрушить все дерево процессов.

Ответы [ 3 ]

0 голосов
/ 19 февраля 2010

Вы можете попробовать присоединиться к циклу с таймаутом (1 секунда?) И проверить, жив ли поток, что-то вроде:

while True:
  a_thread.join(1)
  if not a_thread.isAlive(): break

Завершение операции a_thread вызовет предложение break.

0 голосов
/ 19 февраля 2010

Похоже, что установка флага вашего подпроцесса Process.daemon = False может быть тем, что вы хотите:

Process.daemon :

Флаг демона процесса, логическое значение.Это должно быть установлено до вызова start ().
Начальное значение наследуется от процесса создания.
Когда процесс завершается, он пытается завершить все свои демонические дочерние процессы.

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

0 голосов
/ 19 февраля 2010

Вы пытались явно использовать Process.terminate?

...