Event из multiprocessing убивает процесс, как обойти?

Event из модуля multiprocessing в Python представляет собой объект, используемый для управления сигналами между процессами. Если Event установлен в значение True, то все процессы, которые ждут этого Event, блокируются до тех пор, пока он не станет False.

Если вы не хотите, чтобы Event вызывал преждевременное прерывание работы процесса, можно использовать технику обхода, позволяющую процессу корректно завершить работу. Для этого можно добавить проверку Event внутри цикла работы процесса. Например:

import multiprocessing

def worker(event):
    while not event.is_set():  # Проверяем, не установлен ли Event
        print("Working...")
    
if __name__ == "__main__":
    event = multiprocessing.Event()
    process = multiprocessing.Process(target=worker, args=(event,))
    
    process.start()
    
    # Какой-то другой код выполнения программы
    
    event.set()  # Устанавливаем Event в значение True для завершения процесса
    process.join()  # Ждем завершения процесса

В данном примере процесс будет проверять состояние Event внутри своего цикла работы и завершится корректно, когда Event будет установлен в значение True.

Таким образом, обойти преждевременное завершение процесса, вызванное Event, можно добавив проверку состояния Event в цикле работы процесса и завершить его корректно в нужный момент.