如对我的问题的评论所示,答案来自Puciek。
解决方案是在完成后关闭进程池。我认为它将自动关闭,因为该results
变量位于本地RunMany
,并且在RunMany
完成后将被删除。但是,python并不总是能按预期工作。
固定代码为:
def RunMany(inputs):
from multiprocessing import cpu_count, Pool
proc=inputs[0]
pool=Pool(processes = proc)
results=[]
for arg1 in inputs[1]:
for arg2 in inputs[2]:
for arg3 in inputs[3]:
results.append(pool.apply_async(RunOne, args=(arg1, arg2, arg3)))
#new section
pool.close()
pool.join()
#end new section
casenum=0
datadict=dict()
for p in results:
#get results of simulation once it has finished
datadict[casenum]=p.get()
casenum+=1
return datadict