Отключение "присоединения", когда процесс останавливается
Есть ли способ остановить multiprocessing
Модуль Python от попытки звонить и ждать join()
на дочерние процессы родительского процесса закрываются?
2010-02-18 10:58:34,750 INFO calling join() for process procRx1
Я хочу, чтобы процесс, на который я отправил SIGTERM
выйти как можно быстрее (то есть "быстро провалиться") вместо ожидания в течение нескольких секунд, прежде чем окончательно отказаться от join
попытка.
Пояснения: у меня есть "центральный процесс", который создает кучу "дочерних процессов". Я ищу способ аккуратно обработать сигнал "SIGTERM" от любого процесса, чтобы обрушить все дерево процессов.
3 ответа
Вы можете попробовать присоединиться к циклу с таймаутом (1 секунда?) И проверить, жив ли поток, что-то вроде:
while True:
a_thread.join(1)
if not a_thread.isAlive(): break
Завершение a_thread
сработает break
пункт.
Похоже, установка флага вашего подпроцесса Process.daemon = False
может быть то, что вы хотите:
Флаг демона процесса, логическое значение. Это должно быть установлено до вызова start().
Начальное значение наследуется от процесса создания.
Когда процесс завершается, он пытается завершить все свои демонические дочерние процессы.
Обратите внимание, что демоническому процессу не разрешено создавать дочерние процессы. В противном случае демонический процесс оставил бы своих детей сиротами, если он завершится при выходе из родительского процесса. Кроме того, это не демоны или сервисы Unix, это обычные процессы, которые будут прерваны (и не присоединены), если завершатся не-даемонические процессы.