【问题标题】:Python Multiprocessing Kill ProcessesPython 多处理终止进程
【发布时间】:2013-08-28 00:00:31
【问题描述】:

我正在学习如何使用 Python 多处理库。然而,当我浏览一些示例时,我最终在我的后台运行了许多 python 进程。

example 之一如下所示:

from multiprocessing import Process, Lock

def f(l, i):
    l.acquire()
    print 'hello world', i
    l.release()

if __name__ == '__main__':
    lock = Lock()

    for num in range(10):   # I changed the number of iterations from 10 to 1000...
        Process(target=f, args=(lock, num)).start()

现在这是我的“TOP”命令的屏幕截图:

88950  Python       0.0  00:00.00 1    0    9     91    1584K  5856K  2320K  1720K  2383M  82441 1     sleeping 1755113321 799
88949  Python       0.0  00:00.00 1    0    9     91    1584K  5856K  2320K  1720K  2383M  82441 1     sleeping 1755113321 798
88948  Python       0.0  00:00.00 1    0    9     91    1580K  5856K  2316K  1716K  2383M  82441 1     sleeping 1755113321 797
88947  Python       0.0  00:00.00 1    0    9     91    1580K  5856K  2316K  1716K  2383M  82441 1     sleeping 1755113321 796
88946  Python       0.0  00:00.00 1    0    9     91    1576K  5856K  2312K  1712K  2383M  82441 1     sleeping 1755113321 795
88945  Python       0.0  00:00.00 1    0    9     91    1576K  5856K  2312K  1712K  2383M  82441 1     sleeping 1755113321 794
88944  Python       0.0  00:00.00 1    0    9     91    1576K  5856K  2312K  1712K  2383M  82441 1     sleeping 1755113321 794
88943  Python       0.0  00:00.00 1    0    9     91    1572K  5856K  2308K  1708K  2383M  82441 1     sleeping 1755113321 792
88942  Python       0.0  00:00.00 1    0    9     91    1568K  5856K  2304K  1708K  2383M  82441 1     sleeping 1755113321 790
88941  Python       0.0  00:00.00 1    0    9     91    1564K  5856K  2300K  1704K  2383M  82441 1     sleeping 1755113321 789
88938  Python       0.0  00:00.00 1    0    9     91    1564K  5856K  2300K  1704K  2383M  82441 1     sleeping 1755113321 788
88936  Python       0.0  00:00.00 1    0    9     91    1576K  5856K  2296K  1716K  2383M  82441 1     sleeping 1755113321 787
88935  Python       0.0  00:00.00 1    0    9     91    1560K  5856K  2296K  1700K  2383M  82441 1     sleeping 1755113321 787
88934  Python       0.0  00:00.00 1    0    9     91    1560K  5856K  2296K  1700K  2383M  82441 1     sleeping 1755113321 786
88933  Python       0.0  00:00.00 1    0    9     91    1556K  5856K  2292K  1696K  2383M  82441 1     sleeping 1755113321 785
88932  Python       0.0  00:00.00 1    0    9     91    1556K  5856K  2292K  1696K  2383M  82441 1     sleeping 1755113321 784
88931  Python       0.0  00:00.00 1    0    9     91    1552K  5856K  2288K  1692K  2383M  82441 1     sleeping 1755113321 783
88930  Python       0.0  00:00.00 1    0    9     91    1612K  5856K  2288K  1752K  2383M  82441 1     sleeping 1755113321 783
88929  Python       0.0  00:00.00 1    0    9     91    1588K  5856K  2288K  1728K  2383M  82441 1     sleeping 1755113321 782
88927  Python       0.0  00:00.00 1    0    9     91    1608K  5856K  2284K  1748K  2383M  82441 1     sleeping 1755113321 781
88926  Python       0.0  00:00.00 1    0    9     91    1548K  5856K  2284K  1688K  2383M  82441 1     sleeping 1755113321 780
88924  Python       0.0  00:00.00 1    0    9     91    1556K  5856K  2276K  1700K  2383M  82441 1     sleeping 1755113321 778
88923  Python       0.0  00:00.00 1    0    9     91    1540K  5856K  2276K  1684K  2383M  82441 1     sleeping 1755113321 777
88922  Python       0.0  00:00.00 1    0    9     91    1540K  5856K  2276K  1684K  2383M  82441 1     sleeping 1755113321 776
88921  Python       0.0  00:00.00 1    0    9     91    1536K  5856K  2272K  1680K  2383M  82441 1     sleeping 1755113321 774
88920  Python       0.0  00:00.00 1    0    9     91    1528K  5856K  2264K  1672K  2383M  82441 1     sleeping 1755113321 771
88919  Python       0.0  00:00.00 1    0    9     91    1528K  5856K  2264K  1672K  2383M  82441 1     sleeping 1755113321 771
88918  Python       0.0  00:00.00 1    0    9     91    1528K  5856K  2264K  1672K  2383M  82441 1     sleeping 1755113321 770
....
  1. 我不知道怎么一口气干掉他们。

    ps ... | grep python .... 杀死?

  2. 我需要添加什么样的python代码才能避免再次出现这种悲惨情况。谢谢!

【问题讨论】:

    标签: python macos multiprocessing


    【解决方案1】:

    Blake VandeMerwe 指出的答案在下面列出并解释,希望对其他用户有所帮助:

    Original Author:

    kill -9 `ps -ef | grep test.py | grep -v grep | awk '{print $2}'`
    

    说明:

    1. “ps -ef”:显示所有进程,包括那些没有控制终端的进程,这正是MULTIPROCESSING库生成的无数进程。

    2. “grep test.py”:找到这个脚本生成的所有进程,这是我的python脚本的名字。

    3. “grep -v grep”:将 grep 操作本身从“killing list”中排除

    4. "awk '{print $2}'":使用 AWK 将每条记录分隔成行并打印出第二行,在本例中为进程 ID 列。

    5. "kill -9" 是强制终止进程,参数应该是 UID。前面步骤的完整输出由“`”组合在一起,它是常规键盘上数字 1 左侧的字符。它将它们视为变量并将值传递给kill。

    【讨论】:

    【解决方案2】:

    您需要在工作队列中的进程上.join(),这会将它们锁定到调用应用程序,直到它们全部成功或在父进程被杀死时杀死,并以守护程序模式运行它们。

    http://forums.xkcd.com/viewtopic.php?f=11&t=94726

    end daemon processes with multiprocessing module

    http://docs.python.org/2/library/multiprocessing.html#the-process-class

    http://www.python.org/dev/peps/pep-3143/#correct-daemon-behaviour

    【讨论】:

    • “你应该有...”的代码可以避免这种情况再次发生,对吧?你知道如何杀死多进程产生的所有进程吗?
    猜你喜欢
    • 1970-01-01
    • 2015-11-10
    • 2018-11-27
    • 1970-01-01
    • 1970-01-01
    • 2013-04-30
    • 2014-01-24
    • 2018-11-05
    • 1970-01-01
    相关资源
    最近更新 更多