产生几个并行进程并在完成后杀死它们

Spawn few parallel processes and kill them after finish

我需要制作在某些情况下生成并行进程(worker)并使其完成一些 IO 工作的脚本。当它完成时 - 关闭该过程。 但看起来这些进程默认情况下不会同时退出。

这是我的方法:

import multiprocessing

pool = multiprocessing.Pool(4)

def f(x):                        
    sleep(10)
    print(x)
    return True

r = pool.map_async(f, [1,2,3,4,5,6,7,8,9,10])

但我 运行 它在 ipython 和 whait 中的所有打印,在此之后我可以 运行 ps aux | grep ipython 看到很多进程。看来这些工人还活着。

也许我做错了什么,但我怎样才能让这些进程在完成任务时终止?如果我想一个接一个地生成大量 worker(例如,通过获取一些 rmq 消息),我应该使用什么方法?

当您声明池时,池会生成工作进程。在池关闭之前,它们不会被杀死。相反,他们在那里等待更多的工作出现在队列中。

如果您将代码更改为:

r = pool.map_async(f, [1,2,3,4,5,6,7,8,9,10])
pool.close()
pool.join()
print "check ps ax now"
sleep (10)

您会看到池进程已经消失。

另一件事,您的程序可能无法按预期运行,因为您在声明池后声明了函数 f。我不得不更改 pool = multiprocessing.Pool(4) 以遵循 function f 声明,但这可能因 Python 版本而异。无论如何,如果你遇到奇怪的 "module has no attribute" -exceptions,这就是原因。

汉奴