我正在使用networkx
(网络分析库)进行一些缓慢的计算,并且我正在尝试使用池工作人员来使其更快一些。计算是独立的,因此并行化它们应该相对简单。
def computeInfoPooled(G,num_list):
pool=Pool(processes=4)
def f(k):
curr_stat={}
curr_stat[k]=slow_function(k,G)
return curr_stat
result = pool.map(f,num_list)
return result
现在,我在控制台中运行了以下命令:
computed_result=computeInfoPooled(G)
我希望这段代码创建 4 个进程,并在不同的进程中使用 num_list 的每个项目(一个数字)调用 f 。如果 num_list 包含超过 4 个数字(在我的情况下约为 300),它只会同时运行 4 个并将其余的排队,直到其中一个池工人完成。
当我运行我的代码时发生的事情是产生了许多 python.exe(或分叉,不确定发生了什么),并且似乎它正在创建无限多的进程,所以我不得不拔掉我的机器。
任何想法我做错了什么以及如何解决它?