#python #multiprocessing #signals
#python #многопроцессорная обработка #сигналы
Вопрос:
У меня есть программа, которая запускает несколько процессов, и я убиваю ее с помощью Ctrl C.
В начале программы я перехватываю сигнал, чтобы выполнить некоторые операции очистки.
def cleanup(*_):
# do cleanup operations here
# ...
exit(1)
# trap ctrl c and hide the traceback message
signal(SIGINT, cleanup)
# spawn processes (pool of workers) and do work here
# ...
Проблема в том, что cleanup
вызывается несколько раз (один раз для каждого запущенного процесса).
Как я могу сделать так, cleanup
чтобы он вызывался только один раз?
Ответ №1:
Ваши дочерние процессы наследуют обработчик сигнала от своего родителя. Если вы хотите, чтобы обработчик выполнялся только в одном процессе, вы можете отменить регистрацию обработчика в дочерних процессах.
Комментарии:
1. Как мне отменить его регистрацию? Я предполагаю, что есть другой способ, кроме указания на обработчик пустой функции?
2. original_sigint_handler = signal.getsignal(сигнал. SIGINT) Затем, позже … signal.signal(сигнал. SIGINT, original_sigint_handler)