我一直在使用一个工作池实现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后的快照
现在,我已经阅读了很多关于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
我对并行编程的概念还很陌生,调试问题也变得很棘手,任何帮助我都会非常感激。
通常,最常见的问题是池已创建,但尚未关闭。
我知道确保池关闭的最好方法是使用try/finally子句:
如果你不想与
multiprocessing
斗争,我编写了一个名为parmap
的简单包,它包装了多处理,使我的生活(可能还有你的生活)更轻松。pip install parmap
从parmap usage部分:
简单的平行示例:
在元组列表上迭代:
相关问题 更多 >
编程相关推荐