我正在尝试编写一个包装器,它使用不同的输入文件运行另一个程序。程序(我无法控制,但需要使用)需要与输入文件在同一目录下运行。到目前为止,我的方法是使用OS模块来更改/创建目录结构,使用apply-async来运行给定子目录的程序,并且apply-async中的每个子项更改目录,创建文件,以及前8个进程运行成功(我有8个虚拟核心)
但是,我排队了100个这样的过程(他们运行模拟需要几分钟,我正在寻求优化)。我在运行的外部可执行文件上使用“call”。我认为一切都很顺利,但是在第8次模拟运行之后,一切都停止了,我检查了0个进程正在运行。好像队列忘记了其他进程。
我该怎么做才能解决这个问题?我知道我的内存只有8GB的内存大约300 MB。
我是否需要自己尝试实现某种类型的队列,等待模拟可执行文件的退出代码?
提前谢谢你。
答案 0 :(得分:0)
也许比什么都好。这显示了使用apply_async()
的正确方法,并证明了 - 是的 - 创建比进程更多的任务没有问题。我告诉你这与你正在做的有什么不同,但我不知道你在做什么; - )
import multiprocessing as mp
def work(i):
from time import sleep
sleep(2.0 if i & 1 else 1.0)
return i*i
if __name__ == "__main__":
pool = mp.Pool(4)
results = [pool.apply_async(work, (i,)) for i in range(100)]
results = [r.get() for r in results]
print len(results), results
pool.close()
pool.join()