私は3つのスレッドを持っています。各スレッドにはval
が格納されます。各スレッドはwebsocketからメッセージを受信します。各スレッドでon_message()
が呼び出されると、val
が更新され、メインスレッドの関数を呼び出して、合計3スレッドのval
を合計します。他のスレッドのメインスレッドの関数呼び出し?
thread1.start()
thread2.start()
thread3.start()
私の現在のソリューションは、問題は、このコードは、100%のCPUを使用して繰り返し何val
が更新されていない場合でも、sum
を計算していることである
while True:
sum = thread1.val + thread2.val + thread3.val
です。しかし、sleep()
を使用したくないのは、どんなスレッドでもval
が更新されると、できるだけ早く計算する必要があるからです。私はキューを使うことについて読んだことがありますが、Queue
を使用したくないのは、それらがすべて実行される必要がないからです。 on_message()
がスレッド1,2、または3で呼び出されたときに、メインスレッドで関数を呼び出す方法はありますか?
各スレッドで 'on_message()'が呼び出されたとき、他の2つの 'vals'が合計できることをどのように確認できますか?スレッドは「どこでも」関数を呼び出すことができます。関数は単なるコードであり、任意のスレッドがいつでも実行できます。必要な値がまだ利用できない場合、処理を完了できないことがあります。 – martineau
私は実際にはブロックを除いて試しにそれを持っています – LooksMoneyStatus
残念ながら、それは私が意味するものではありません - それはすべてが生産されるまで値を合計することはできませんでした。あなたが受け入れた答えは、 "最後の出来事"があるという意味でそれに対処するのに役立ちます(しかしそれは私には完全にはっきりしません)。 – martineau