私はコードをたくさん持っており、ここにピースを付けています。キュー - マルチスレッド化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
が空の場合:
'Queue'は、プロデューサ/コンシューマスレッドに最適です。しかし、私たちは助けにするために、ここにコードを入力することがOPにあるのか確認する必要があります。 –
@CraigBurgler私は質問を編集しました。問題はself.dataで、変数 "data"は更新されません。なぜなら、私のメインプログラムがコード行self.data = queue_read.get()を通過すると、もう一度読む必要がないからです。だから、スレッドからデータを連続的に読み込み、自分のGUIを更新するにはどうすればいいのだろうかと思っています –
私の答えを見てください –