【问题标题】:Why are the children failing to die?为什么孩子们死不瞑目?
【发布时间】:2012-08-13 21:33:02
【问题描述】:

我预计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)>
...

【问题讨论】:

  • +1 表示不错的标题。可能是重金属唱片的标题。
  • 多处理总是让这些令人尴尬的令人敬畏的 cmets 将垂死的孩子变成僵尸,杀死他们的父母和其他东西。真是太棒了xD

标签: python linux multiprocessing


【解决方案1】:

因为terminate函数只是发送SIGTERM信号给进程,而signals are asynchronous,所以你可以休眠一段时间,或者wait用于进程终止(信号接收)。

例如如果你在终止后添加字符串time.sleep(.1),它可能会被终止。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-26
    • 2021-07-24
    • 1970-01-01
    • 2021-12-06
    • 1970-01-01
    • 2020-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多