2016-09-28 22 views
4

私は単純なマルチプロセスプログラム(以下のコード)を実行します。私は2つのプロセッサーを作ってから、結果を保管するためにキューを初期化します。マルチプロセッシングの戻り値。マルチプロセッシングPythonのQueue()

なぜ同じ名前のqが、別の値を出力するのか不思議です。 私はpro1pro2からキューストア2の戻り値を知っています。私はそれが私はとても混乱して作る方法を一つの変数qは1、または2

可能把握することはできません

q = [1,2] 

または

q=[2,1] #depend on which one runs first 

:しかし、私は期待、それはのようなものです。 ありがとうございます。

コード:

import multiprocessing 


def run(ID, q): 
    print("Starting thread %s " % (ID)) 

    q.put(ID) 
    return None 

if __name__ == '__main__': 
    q = multiprocessing.Queue() #store the result 
    pro1 = multiprocessing.Process(target=run, args=(1,q)) 
    pro2 = multiprocessing.Process(target=run, args=(2,q)) 

    pro1.start() 
    pro2.start() 

    pro1.join() 
    pro2.join() 

    print("q is ", q.get()) 
    print("another q is ", q.get()) 

結果

Starting thread 2 
Starting thread 1 
('q is ', 1) 
('another q is ', 2) 

答えて

2

私はあなたが正確に混乱しているものは100%わからないんだけど、ここで私は助けになると思うものですしかし、もし私がオフトラックだと私を修正してください。あなたのキューには両方のプロセスの出力があります。あなたはちょうど最初に終わったものを手に入れています。例えば

あなたのケースでは、それは最初のプロセスのような1つの仕上げを見て、両方のプロセスは、あなたがq.get()あなたを呼び出すときに、キューが続い

[1,2] 

のようになります。完了した後、次にこのように2

を処理1を取得し、キューが今のようになります。あなたは意志再びq.get()を呼び出すときに

`[2]` 

2を取得して、キューが空になりました。

+0

私はそれを得ました。ありがとう、本当に理にかなっています。 – Catbuilts

関連する問題