我正在尝试编写一个包装器,它通过运行另一个具有不同输入文件的程序进行迭代。程序(我无法控制它,但需要使用它)需要从与输入文件相同的目录中运行。到目前为止,我的方法是使用OS-module更改/创建目录结构,使用apply-async来运行程序,给定子目录,apply-async中的每个子进程更改目录,创建文件,并且前8个进程成功运行(我有8个虚拟内核)
然而,我正在排队多达100个这样的进程(它们运行一个模拟,这需要几分钟的时间,我正在寻找优化)。我在运行的外部可执行文件上使用"call“。我以为一切都很顺利,但在第8次模拟运行后,一切都停止了,我检查0个进程正在运行。这就好像队列忘记了其他进程一样。
我能做些什么来解决这个问题呢?我知道我的RAM只增加了大约300MB的8 8GB。
提前谢谢你。
发布于 2013-11-03 13:25:22
也许总比什么都没有好。这展示了使用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()https://stackoverflow.com/questions/19749910
复制相似问题