2012-03-05 166 views
0

下面是测试代码 - 我正在玩标准库中找到的线程池。问题是最后的过程永远不会结束。它只是挂起。Python线程池 - 进程永远不会结束

我应该提到我在这里之后,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

从文档池内

工作进程通常住池的工作队列的整个持续时间。

你或许应该使用任务这样

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