1

我正在尝试编写一个包装器,该包装器通过运行具有不同输入文件的另一个程序进行迭代。程序(我无法控制,但需要使用)需要在与输入文件相同的目录中运行。到目前为止,我的方法是使用 OS-module 更改/创建目录结构,使用 apply-async 运行给定子目录的程序,apply-async 中的每个子项更改目录,创建文件,以及前 8 个进程成功运行(我有 8 个虚拟内核)

但是,我正在排队多达 100 个这样的进程(它们运行一个需要几分钟的模拟,我正在寻求优化)。我在我正在运行的外部可执行文件上使用“调用”。我以为一切都很顺利,但是在第 8 次模拟运行后,一切都停止了,我检查了 0 个进程正在运行。就好像队列忘记了其他进程。

我能做些什么来解决这个问题?我知道我的 RAM 在 8GB 中只增加了大约 300 MB。

我是否需要考虑自己实现某种队列来等待模拟可执行文件的退出代码?

先感谢您。

4

1 回答 1

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()
于 2013-11-03T05:25:21.717 回答