首页 > 解决方案 > 在这种情况下,我应该在整个程序中保留池对象(及其工作人员)吗?

问题描述

我目前正在修改现有程序以包含多处理功能,以便在多核系统上更有效地使用它。我正在使用 Python3 的多处理模块来实现这一点。我对多处理相当陌生,我想知道我的设计是否非常有效。

我的程序的一般执行步骤如下:

现在你可能会问我为什么要创建工人池并在每个函数中关闭它。原因是在完成一个函数后,我需要将所有并行处理的结果合并起来,输出下一个函数需要的一些统计值。例如,function1() 可能会得到 function2() 所需的平均值。

现在我意识到在 Python 中重复创建一个工人池是有代价的。我想知道是否有一种方法可以保留 function1 和 function2 之间的工作人员,因为并行化的性质在两个函数中完全相同。

我想的一种方法是在主进程中创建 mp.Pool 对象并将其作为参数传递给每个函数,但我不确定这是否是一种有效的方法。另外,附带说明一下,我还担心程序的内存消耗。

我希望是否有人可以验证我的想法或提出更好的方法来实现相同的目标。

*edit 认为如果我包含一些代码会更有帮助。

pool = mp.Pool(processes=min(args.cpu, len(chroms)))
find_and_filter_reads_partial = partial(find_and_filter_reads, path_to_file, cutoff)
filtered_result = pool.map(find_and_filter_reads_partial, chroms)
pool.close()

标签: pythonparallel-processingmultiprocessingpython-multiprocessing

解决方案


推荐阅读