2017-06-02 44 views
0

我一直在調試這個非常簡單的代碼,它調用兩個函數,每個函數在完成之前等待1秒。我知道apply_async是假設從一羣工作人員並行運行作業。因此,如果有10個工人和20個等待命令提交,程序應該運行總共2秒,因爲1秒等待命令中的10個應該並行運行10個進程。我有20個等待命令的代碼持續運行20秒左右,向我表明我的並行化代碼嘗試不起作用。它運行20秒,無論我的游泳池中的工作人員數量是否有人對我可能會做錯的建議?謝謝!python multiprocessing apply_async似乎正在運行系列作業

from multiprocessing import Pool 

def doubler(number): 
    time.sleep(1) 

def double_trouble(number): 
    time.sleep(1) 

if __name__ == '__main__': 
    start_time = time.time() 
    pool = Pool(processes=10) 

    for i in range(10): 
     pool.apply_async(double_trouble(i)) 
     pool.apply_async(doubler(i)) 

    pool.close() 
    pool.join() 
    print ("We took second: ", time.time()-start_time) 
+0

這真的應該被設計成引發錯誤。 – user2357112

回答

1

pool.apply_async需要函數參數作爲一個單獨的PARAM:

pool.apply_async(double_trouble, (i,)) 
pool.apply_async(doubler, (i,)) 
+0

謝謝bav!現在工作正常。它運行反正混淆了我。 – barspurk