2016-09-01 15 views
0

私はコードをたくさん持っており、ここにピースを付けています。キュー - マルチスレッド化Python

while not stop_event.wait(1): # Continuous Reading Function 

    #print "hello2" 
    #print ("working on %s" % arg) 
    data1 = Read(soa1, bytes1, ser) 
    data2 = Read(soa2, bytes2, ser) 
    data3 = Read(soa3, bytes3, ser) 

    data = np.concatenate([data1, data2, data3]) 
    print data.size 
    queue_read.put(data) 
    time.sleep(1) 

私はこのスレッドでシリアル通信により、MCUからデータを読み、私のメインに戻ってそれを送信しています: - 機能に対象としている - 次のようにwhileループを持っている基本的に私はスレッドを持っていますプログラム - queue_read.put(data)を使用します。これは1秒ごとに実行されます。私のメインプログラムで

私は5分後にMCU内の値を意図的に変更された

self.data = queue_read.get() 

---このスレッドからの出力を読んでいます。変更中、このスレッドはwhileループのようにまだ実行されています。

5分後、変数 "data"はMCUから更新された新しい値を持つ必要があります。しかし、私の驚きにはそれはしません。まだ初期値があります。私がここに欠けているものはありますか?キューを使用している、データを取得する正しい方法は?

while True: 
    self.data = queue_read.get() 
    self.update_GUI() 

queue_read.get()ブロックをqueue_readが空の場合:

+0

'Queue'は、プロデューサ/コンシューマスレッドに最適です。しかし、私たちは助けにするために、ここにコードを入力することがOPにあるのか確認する必要があります。 –

+0

@CraigBurgler私は質問を編集しました。問題はself.dataで、変数 "data"は更新されません。なぜなら、私のメインプログラムがコード行self.data = queue_read.get()を通過すると、もう一度読む必要がないからです。だから、スレッドからデータを連続的に読み込み、自分のGUIを更新するにはどうすればいいのだろうかと思っています –

+0

私の答えを見てください –

答えて

0

次のアプローチは、彼らが起こるとしてあなたが見ると、データの変化に対応することを可能に連続してキューからデータを読み取り、処理します。メインスレッドがGUIの更新以外の処理を行う場合は、独自のスレッドでこのコードを実行する必要があります。