2016-01-12 8 views
5

私は以下のいくつかの本当に簡単なコードを手に入れました。 #マルチプロセッシングインポートプールから!は/ usr/binに/ pythonの インポート時なぜ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() 

あなたが見ることができるように、私はマルチプロセッシングを使用して1000個のジョブを処理するために、労働者を持っています。 ジョブが25-30の場合、ワーカーは10秒間スリープ状態になります。これは、時間/リソースコストジョブをシミュレートしようとしています。

上記のコードを実行すると、出力は以下のようになります。ジョブ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

私はいかがですか......ありがとう!!!!!!!! –

関連する問題