2015-11-02 73 views
3

在下面的代碼中,其中Function是要調用的函數,我如何指定要用作10的處理器數量?在一定數量的內核上進行多處理

if __name__ == '__main__': 
     jobs = [] 

     for l in lst: 
      p = multiprocessing.Process(target=Function, args=(l,)) 
      jobs.append(p) 
      p.start() 

此代碼將完全接管我的服務器,那麼如何限制它到十個內核?我應該把它放在一個循環中嗎?

回答

4

既然你基本上映射功能上的變量列表我可能會建議你使用multiprocessing.Pool代替。

這是一個創建一個有限數量的工作線程池的類,然後可以通過輸入列表運行一個函數,而不是在每個函數調用創建一個線程的Process上運行,然後全部運行它們同時

在Python版本使用它的一個例子< 3.3將是:

from multiprocessing import Pool 
import contextlib 

num_threads = 10 

with contextlib.closing(Pool(num_threads)) as pool: 
    results = pool.map(Function, lst) 

如果您正在使用python 3比Pool類可以使用上下文管理器默認情況下,代碼簡化爲:

from multiprocessing import Pool 

num_threads = 10 

with Pool(num_threads) as pool: 
    results = pool.map(lst) 
+0

哇!這非常有幫助!它很好用,但它似乎不想將函數的輸出寫入文件。該函數以一個o.write()語句結束,該語句現在沒有被執行。我是否需要一些額外的代碼來確保輸出寫入文件? – poppyseeds

+1

這裏'o'是一個每次調用該函數時都會打開的文件嗎?如果是這樣,我猜可能發生的是任何緩衝到它的寫入都沒有被刷新到磁盤。在調用'o.write()'後,嘗試添加'o.flush()'調用。如果這不是我必須看到你的函數的代碼來給出更具體的建議。 –

相關問題