2016-01-12 49 views
5

我在下面得到了一些非常簡單的代碼。 #!從多處理導入池 進口時間爲什麼Python多處理按順序運行?

def worker(job): 
    if job in range(25,30): 
     time.sleep(10) 
    print "job:%s" %job 
    return (job) 

pool = Pool(processes=10) 
result = [] 

for job in range(1, 1000): 
    result.append(pool.apply_async(worker(job))) 
pool.close() 
pool.join() 

正如你可以看到在/ usr/bin中/ Python的 ,我有一個工人來處理1000個作業使用多。 如果工作是25-30,那麼工人會睡10s。這是嘗試模擬時間/資源成本的工作。

當我運行上面的代碼時,輸​​出如下所示。從作業25開始。整個過程像一個順序過程一樣運行。因爲每10秒就會在作業24之後輸出。直到作業30完成。

但是爲什麼?不應該多處理進程同時運行?

[[email protected] tmp]# ./a.py 
job:1 
job:2 
job:3 
job:4 
job:5 
job:6 
job:7 
job:8 
job:9 
job:10 
job:11 
job:12 
job:13 
job:14 
job:15 
job:16 
job:17 
job:18 
job:19 
job:20 
job:21 
job:22 
job:23 
job:24 


job:25 
job:26 
... 

回答

4

因爲你在實例化時調用它。您應該將可調用對象和參數(而不是結果)傳遞給apply_async。

result.append(pool.apply_async(worker, [job])) 
+0

如何羞辱我......謝謝你!!!!!!!! –