Python多处理导致许多僵尸进程

2024-10-01 04:49:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在使用一个工作池实现python的多处理库。我实现了以下代码

import main1
t1 = time.time()
p = Pool(cores) 
result = p.map(main1, client_list[client])
if result == []:
    return []
p.close()
p.join()
print "Time taken in performing request:: ", time.time()-t1
return shorted(result)

但是,在运行了一段时间后,我得到了我的应用程序的许多运行后台进程。这是为我的应用程序执行ps aux后的快照

Snapshot showing all the zombie processes

现在,我已经阅读了很多关于stackoverflow的类似问题,比如how to kill zombie processes created by multiprocessing module?,它调用了我已经实现的using.join(),并且我从这里学习了如何杀死所有这些进程Python Multiprocessing Kill Processes。但我想知道我的代码可能出了什么问题。 我无法在main1函数中共享所有代码,但我已将整个代码块放在try catch块中,以避免出现主代码中的错误可能导致僵尸进程的情况。

def main1((param1, param2, param3)):
    try:
       resout.append(some_data) //resout in case of no error
    except:
        print traceback.format_exc()
        resout = []  //sending empty resout in case of error
    return resout

我对并行编程的概念还很陌生,调试问题也变得很棘手,任何帮助我都会非常感激。


Tags: 代码inclient应用程序returntime进程result
1条回答
网友
1楼 · 发布于 2024-10-01 04:49:02

通常,最常见的问题是池已创建,但尚未关闭。

我知道确保池关闭的最好方法是使用try/finally子句:

try:
    pool = Pool(ncores)
    pool.map(yourfunction, arguments)
finally:
    pool.close()
    pool.join()

如果你不想与multiprocessing斗争,我编写了一个名为parmap的简单包,它包装了多处理,使我的生活(可能还有你的生活)更轻松。

pip install parmap

import parmap
parmap.map(yourfunction, arguments)

从parmap usage部分:

  • 简单的平行示例:

    import parmap
    y1 = [myfunction(x, argument1, argument2) for x in mylist]
    y2 = parmap.map(myfunction, mylist, argument1, argument2)
    y1 == y2
    
  • 在元组列表上迭代:

    # You want to do:
    z = [myfunction(x, y, argument1, argument2) for (x,y) in mylist]
    z = parmap.starmap(myfunction, mylist, argument1, argument2)
    
    
    # You want to do:
    listx = [1, 2, 3, 4, 5, 6]
    listy = [2, 3, 4, 5, 6, 7]
    param = 3.14
    param2 = 42
    listz = []
    for (x, y) in zip(listx, listy):
        listz.append(myfunction(x, y, param1, param2))
    # In parallel:
    listz = parmap.starmap(myfunction, zip(listx, listy), param1, param2)
    

相关问题 更多 >