在这种情况下,是否应在整个程序中保留池对象(及其工作人员)?

时间:2019-04-02 05:01:22

标签: python parallel-processing multiprocessing python-multiprocessing

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

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

  • 主要过程

    • 调用function1()->创建工作程序池并并行执行某些操作。关闭游泳池。
    • 调用function2()->创建工作程序池并并行执行某些操作。关闭游泳池。
    • 调用function3()->创建工作程序池并并行执行某些操作。关闭游泳池。
    • ,重复直到结束。

现在您可能会问为什么我要创建工人池并在每个函数中将其关闭。原因是在完成一个功能之后,我需要合并所有并行处理的结果,并输出一些下一个功能所需的统计值。因此,例如,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()

0 个答案:

没有答案