I expected the terminate()
method to kill the two processes:
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
Running the code gives:
<Process(foo, started)>
<Process(bar, started)>
<Process(foo, started)>
<Process(bar, started)>
...
I was expecting:
<Process(foo, stopped)>
<Process(bar, stopped)>
<Process(foo, stopped)>
<Process(bar, stopped)>
...
Because terminate function just send SIGTERM signal to process, but signals are asynchronous, so you can sleep for some time, or wait for processes termination(signal receiving).
For example if you add string time.sleep(.1)
after termination, it probably will be terminated.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With