2014-02-27 19 views
0

我需要同時運行一定數量的線程或進程,直到所有這些完成。我如何在Python 2.6中做到這一點。 (注意:我相信Python 3.0具有ThreadPoolExecutor,但這並不能幫助我,因爲我們在2.6上)。運行一定的編號。的線程/進程

我試過如下:

pool = multiprocessing.Pool(2) 

    try: 
     for table_name in table_list: 
      pool.apply_async(Processor(table_name, self.type, 
       self.properties).exec()) 
    except KeyboardInterrupt: 
     pool.terminate() 
    else: 
     pool.close() 
    pool.join() 

,但它的處理每個表順序。我想要的是,如果有10個表&池大小是5,那麼它應該首先啓動5個線程。一旦其中一個完成,它應該選擇下一個,然後下一個&等,直到所有這些都被處理。

如何在Python 2.6中執行此操作?請幫忙。

回答

1
pool.apply_async(Processor(table_name, self.type, self.properties).exec()) 

立即調用.exec需要延遲,所以反而通過.exec功能:

pool.apply_async(Processor(table_name, self.type, self.properties).exec) 

apply_async(func[, args[, kwds[, callback]]])

+0

謝謝你,丹!這工作。一個不同的 - 相關的問題。現在輸出全部混在一起,所以我無法確定哪一行來自哪個進程。有沒有簡單的方法來解決這個問題?我必須使用日誌框架或類似的東西嗎? – DilTeam

+0

要麼將​​它們作爲輸出行的前綴,要麼將它們寫入不同的輸出。 –

相關問題