下面是测试代码 - 我正在使用标准库中的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。我已经尝试将进程设置为守护进程但没有运气。有什么建议/更好的文件吗?
答案 0 :(得分:0)
来自文档
池中的工作进程通常在池的工作队列的整个持续时间内存活。
你应该用于这样的任务
t.imap(func,xrange(10))
t.close()
t.join()