我目前正在修改现有程序以包含多处理功能,以便可以在多核系统上更有效地使用它。我正在使用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()