2013-08-07 47 views
1

基本上,我想有一個線程池來執行一段時間的一些任務。我認爲Python中的多處理庫對我來說是完美的。然而,我找不到一種方法,因爲當其中一個進程完成時(並且不需要等待池中的其他線程完成),返回主線程並執行某些任務(遞增變量,檢查時間閾值已經滿足等),以潛在地啓動具有新參數的新過程。例如,這裏的所有參數的函數給出的前期(1..10)爲處理池(4)處理:如何使用Python多處理庫完成進程時請求新任務?

from multiprocessing import Pool 

def f(x): 
return x*x 

if __name__ == '__main__': 
    pool = Pool(processes=4)    # start 4 worker processes 
    print pool.map(f, range(10))   # prints "[0, 1, 4,..., 81]" 

然而,由於我需要執行的一些任務特定的時間段,這不會對我有所幫助,因爲我不一定知道這些任務需要多長時間才能完成。有沒有辦法做到這一點?

+0

在工作人員之間使用共享隊列,並將任務推送到那裏。看到我的示例實現:http://integricho.github.io/2013/03/27/no-man-left-behind/ – andrean

回答

1

其中一個解決方案是使用共享隊列。例如:

from multiprocessing import Process, Queue 
import time 

def job(queue): 
    while True: 
     task = queue.get() 
     print task*task 

if __name__ == '__main__': 
    # create shared queue 
    q = Queue() 

    # create processes 
    processes = [] 
    for i in range(5): 
     p = Process(target=job, args=(q,)) 
     p.start() 
     processes.append(p) 

    # generate data 
    for i in range(5): 
     for j in range(10): 
      q.put(10*i+j) 
     time.sleep(0.5) 

    # join 
    for p in processes: 
     p.join() 

我添加time.sleep,以顯示它是如何工作數據時以後添加(流程等到事情是在共享隊列可用)。

相關問題