Python线程池 - 进程永远不会结束

时间:2012-03-05 22:26:40

标签: python multithreading process

下面是测试代码 - 我正在使用标准库中的Thread Pool。问题是最后的过程永远不会结束。它只是挂起。

我应该提一下我在这之后的事情,func取决于输入可能需要几秒钟到几分钟而且我希望它们尽快完成 - 按照先完成的顺序完成。理想情况下,我将执行的“func”数量将同时为五个中的四个。

>>> from multiprocessing.pool import ThreadPool
>>>
>>> def func(i):
...     import time
...     if i % 2 == 0: time.sleep(5)
...     print i
... 
>>> t = ThreadPool(5)
>>> 
>>> for i in range(10):
...     z = t.Process(target=func, args=(i,))
...     z.start()
... 
1
3
5
7
9

>>> 0
2
4
6
8

换句话说,在打印“8”之后,代码只是在这里等待,直到我强制使用KeyboardInterrupt。我已经尝试将进程设置为守护进程但没有运气。有什么建议/更好的文件吗?

1 个答案:

答案 0 :(得分:0)

来自文档

  

池中的工作进程通常在池的工作队列的整个持续时间内存活。

你应该用于这样的任务

t.imap(func,xrange(10))
t.close()
t.join()