【发布时间】:2019-07-02 09:58:34
【问题描述】:
我对 python3 中的multiprocessing 世界比较陌生,因此如果之前有人问过这个问题,我很抱歉。我有一个脚本,它从 N 个元素的列表中对每个元素运行整个分析,将每个元素映射到不同的进程。
我知道这是次优的,实际上我想提高多处理效率。我使用map() 将每个进程运行到Pool() 中,该Pool() 可以包含用户通过命令行参数指定的尽可能多的进程。
代码如下所示:
max_processes = 7
# it is passed by command line actually but not relevant here
def main_function( ... ):
res_1 = sub_function_1( ... )
res_2 = sub_function_2( ... )
if __name__ == '__main__':
p = Pool(max_processes)
Arguments = []
for x in Paths.keys():
# generation of the arguments
...
Arguments.append( Tup_of_arguments )
p.map(main_function, Arguments)
p.close()
p.join()
如您所见,我的进程调用了一个主函数,而该主函数又一个接一个地调用了许多其他函数。现在,每个 sub_functions 都是可多处理的。我可以从那些映射到主进程运行的同一个池的子函数中映射进程吗?
【问题讨论】:
-
不确定我是否得到了这个。您想在您的池
p的工作人员中运行main_function,并且在执行main_function的进程中,您想将sub_function_*提交到同一个池? -
没错。这主要是因为大多数时候一个进程比其他进程持续的时间长得多(其中要处理的数据更多),所以我想充分利用剩余的进程来更快地完成它。我可以重新编码整个事情以避免这样做,但遗憾的是我没有足够的时间,所以我正在寻找这种解决方法。
标签: python python-3.x multiprocessing python-multiprocessing pool