我使用python进行蒙特卡罗模拟,需要100次调用外部* .exe进行一次循环,我有20个循环。我使用Win32api.ShellExecute
方法定义了一个负责调用外部exe程序的函数。为了避免相互影响,我复制了100个文件夹,每个文件夹都有* .exe程序,它们可以在没有相互影响的情况下运行。
为了加快计算效率,我尝试使用并行python(pp)。我的电脑有4个ncpus,我想用它们同时在不同的文件夹中运行外部* .exe。但我发现随着程序的运行,任务管理器中会有越来越多的python.exe挂起,最终它会提醒我"OSError [Error 24] Too many open files"
或python内核意外死亡。我不知道是否有必要处理那些冗余的python.exe,见下图:
我的并行python代码是:
ppservers=()
job_server=pp.Server(4,ppservers=ppservers) #4 is ncpus
Ne=tuple(range(N)) #N is 100
jobs=[(i,job_server.submit(runexe,(i,root_directory),(),('win32api',))) for i in Ne]
for i,job in jobs:
job()
while True:
back_process=os.popen('tasklist |findstr /i ogs.exe').readlines()
if back_process==[]:
break
os.popen('taskkill /f /fi "imagename eq python.exe" /fi "memusage lt 100000"')