当前位置: 首页 > 面试题库 >

Python多处理终止进程

舒浩邈
2023-03-14
问题内容

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

其中的例子看起来象下面这样:

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 ....杀死吗?

  1. 我需要添加哪种python代码,以避免再次发生这种悲惨的情况。谢谢!

问题答案:

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

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

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

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



 类似资料:
  • 问题内容: 如何使多线程python程序响应Ctrl + C键事件? 编辑: 代码是这样的: 我试图在所有线程上删除join(),但仍然无法正常工作。是否因为每个线程的run()过程中的锁段? 编辑: 上面的代码应该可以工作,但是当当前变量在5,000-6,000范围内并遍历以下错误时,它总是会中断 问题答案: 在启动主线程之前,将除主线程之外的每个线程都设为守护进程(在2.6或更高版本中,在2.

  • 问题内容: 我有一个处理很大文件并将数据发送到oracle数据库的应用程序(使用Java 6,oracle 9)。 在循环中,我使用并创建了所有使用生成的SQL语句。 我有一种情况,在期间将a 抛出。此时,该批处理停止执行。 我希望继续执行批处理,以便随后可以在method中检查失败的更新。 关于类BatchUpdateException的Javadoc说: 批处理更新中的命令无法正确执行并且抛出

  • 我还有一个关于Python多处理的问题。我有一个模块,它创建了一个进程,并在while-True循环中运行。此模块将从另一个Python模块启用/禁用。另一个模块将导入第一个模块一次,并作为进程运行。 我该如何更好地实现这一点? 因此,作为参考: 想象第二个模块是这样的: 不断地运行一个流程来检查循环中的条件似乎是一种浪费,但我很乐意接受这样的解决方案,它只允许我从外部设置值。理想情况下,我希望能

  • 我有一个图像路径列表,我想在进程或线程之间划分,以便每个进程处理列表的某些部分。处理包括从磁盘加载图像,进行一些计算并返回结果。我正在使用Python 2.7 下面是我如何创建辅助进程 我所面临的问题是,当我在initializer函数中记录初始化时间时,我知道worker不是并行初始化的,而是每个worker都以5秒的间隔初始化,下面是供参考的日志 我尝试过使用将同时启动辅助线程 我知道Wind

  • 问题内容: 我一直在阅读有关Python的多处理模块的信息。我仍然认为我对它可以做什么没有很好的了解。 假设我有一个四核处理器,并且我有一个包含1000000个整数的列表,我想要所有整数的总和。我可以简单地做: 但这仅将其发送到一个内核。 是否有可能使用多处理模块将数组划分为多个,并让每个核获得其部分的总和并返回值,以便可以计算总和? 就像是: 任何帮助,将不胜感激。 问题答案: 是的,可以对多个

  • 问题内容: 我正在尝试在python中编写一些短脚本,如果尚未启动该脚本,则会在子进程中启动另一个python代码,否则终止终端机和应用程序(Linux)。 所以看起来像: 应用缺少从文件 “ .proc”中 读取的pid来命名进程的知识,存在问题。另一个问题是解释器说名为 dat的 字符串不等于 “ x” ?我错过了什么? 问题答案: 使用很棒的库非常简单: 如果您不想安装新的库,可以使用以下模