我multiprocessing
用来加快程序运行速度,并且有一个我无法解决的难题。我multiprocessing
经常使用该功能编写许多短文件(基于大量输入文件),writing_sub_file
最后我在使用该功能将所有这些过程结束后,将所有这些文件连接起来my_concat
。这是两个代码示例。请注意,此代码在我的main .py
文件中,但是该功能my_concat
是从另一个模块导入的。第一个:
if __name__ == '__main__':
pool = Pool(processes=cpu_count())
arg_tuple = (work_path, article_dict, cat_len, date_to, time_period, val_matrix)
jobs = [(group, arg_tuple) for group in store_groups]
pool.apply_async(writing_sub_file, jobs)
pool.close()
pool.join()
my_concat(work_path)
这会产生许多错误(与池中的进程一样多),因为它会my_concat
在我的所有进程完成之前尝试应用(我没有给出错误的堆栈,因为很明显,该my_concat
函数会尝试在每个文件之前应用已由池进程编写)。
第二个:
if __name__ == '__main__':
pool = Pool(processes=cpu_count())
arg_tuple = (work_path, article_dict, cat_len, date_to, time_period, val_matrix)
jobs = [(group, arg_tuple) for group in store_groups]
pool.apply_async(writing_sub_file, jobs)
pool.close()
pool.join()
my_concat(work_path)
完美地运作。
有人可以解释一下原因吗?
第二个my_concat(work_path)
是if
语句内部,因此仅在脚本作为主脚本运行时才执行。
首先,my_concat(work_path)
是在if
声明之外。当multiprocessing
进口在新的Python会话的模块,它不是为进口__main__
,但以自己的名义。因此,当您将模块导入到该进程时,该语句几乎立即在您池的每个进程中运行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句