我希望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)>
...
答案 0 :(得分:7)
因为terminate函数只发送SIGTERM信号进行处理,但是signals are asynchronous,所以你可以睡一段时间,或wait进程终止(信号接收)。
例如,如果在终止后添加字符串time.sleep(.1)
,则可能会终止它。