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

时间:2016-12-01 13:05:41

标签: python python-multiprocessing

我需要制作一些脚本,它在某些条件下产生并行处理(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中运行它并且为所有打印输出,之后我可以运行ps aux | grep ipython并看到很多进程。看起来这些工人还活着。

也许我做错了什么,但是如何在完成任务后让这些进程终止?如果我想逐个产生很多工作者(例如通过获取一些rmq消息),我应该使用什么方法?

1 个答案:

答案 0 :(得分:1)

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

如果您将代码更改为:

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)以遵循函数f声明,但这可能因Python版本而异。无论如何,如果你得到奇怪的“模块没有属性”-exceptions,这就是原因。

哈努哈利