Почему дети не умеют умирать?

Я ожидал, что метод terminate() убьет два процесса:

 import multiprocessing import time def foo(): while True: time.sleep(1) def bar(): while True: time.sleep(1) if __name__ == '__main__': while True: p_foo = multiprocessing.Process(target=foo, name='foo') p_bar = multiprocessing.Process(target=bar, name='bar') p_foo.start() p_bar.start() time.sleep(1) p_foo.terminate() p_bar.terminate() print p_foo print p_bar 

Запуск кода дает:

 <Process(foo, started)> <Process(bar, started)> <Process(foo, started)> <Process(bar, started)> ... 

Я ожидал:

 <Process(foo, stopped)> <Process(bar, stopped)> <Process(foo, stopped)> <Process(bar, stopped)> ... 

One Solution collect form web for “Почему дети не умеют умирать?”

Поскольку функция завершения просто посылает сигнал SIGTERM для обработки, но сигналы асинхронны , поэтому вы можете спать в течение некоторого времени или ждать завершения процессов (получение сигнала).

Например, если после завершения добавить строку time.sleep(.1) , она, вероятно, будет прекращена.

Python - лучший язык программирования в мире.