2012-01-07 18 views
2

私はマルチプロセッシングが初めてです。私は、リストがワーカーのサブプロセスに送られ、変更され、印刷のために返送される、簡単なサンプルコードを変更しました。私は、複数のプロセスが実際に並行して実行されているかどうかをテストし、各プロセスが終了すると返されるように変更しました。私がこれをテストする方法は、合計[0]、合計[1]、合計[2]、合計[3]を同時に開始することです。しかし、は強制的に合計[2]切迫
合計[0]、合計[1]印刷:Python3、私の多重処理の例は並列処理を実行していません

結果。
合計[2]待機する必要がありますが、合計[3]も待機します。

出力戻り、次のように:

['', 'DOCTYPE', 'HTML'] 
['LAST', 'NAV'] 
['TOPIC', 'FORUM'] 
['HEADLINE2', 'INNERHTML'] 

私はこのように返すためにそれを期待


['', 'DOCTYPE', 'HTML'] 
['LAST', 'NAV'] 
['HEADLINE2', 'INNERHTML'] 
['TOPIC', 'FORUM'] 

私が言ったように、私は」サブプロセスにはまったく新しいものです。どんな助けもありがとうございます。おかげ


あなたの最後のforループあなたはその結果を順に取得しているに私の例

import multiprocessing as mp 
import time 



def worker(inq,outq): 
    obj = inq.get() 
    for b in range(len(obj)): 
     obj[b] = obj[b].upper() 

    if obj[0] == 'TOPIC': time.sleep(9) 
    outq.put(obj) 


total = [['', 'doctype', 'html'], ['last', 'nav'], ['Topic', 'forum'], ['headline2', 'innerHTML']] 

if __name__=='__main__': 
    inq = [] 
    outq = [] 
    p = [] 
    for i in range(len(total)): 
     inq.insert(i, mp.Queue()) 
     outq.insert(i, mp.Queue()) 

     p.insert(i, mp.Process(target=worker, args=(inq[i],outq[i]))) 
     p[i].start() 

     inq[i].put(total[i]) 


    for i in range(len(total)): 
     # Wait for the worker to finish 
     p[i].join() 

     result1 = outq[i].get() 

     print(result1) 

答えて

1

ためのコード - そう、3仕上げ2前に、あなたがいるにもかかわらず、最初に2の結果を得る。

worker()の末尾にprint(obj)行を追加して、3が最初に終了するようにしてください。

+0

私はこれを確認し、できるだけ早くあなたに連絡します。おそらく週末に – Rhys

関連する問題