私は数多くのスレッドを生成するPythonプログラムを持っています。これらのスレッドは、2秒から30秒の範囲で持続します。メインスレッドでは、各スレッドが完了してメッセージを出力するたびに追跡します。私がちょうどすべてのスレッドを.join()して、最初のスレッドが30秒間続き、もう少し早く完了すると、すぐにメッセージを印刷することはできません。すべてのメッセージは30秒後に印刷されます。Pythonスレッドでは、スレッドの完了をどのように追跡できますか?
基本的には、までスレッドが完了するまでブロックします。スレッドが完了するとすぐに、そのスレッドに関するメッセージを表示し、他のスレッドがまだ生存している場合はブロックするように戻ります。すべてのスレッドが完了したら、プログラムを終了します。
私が考えることができる1つの方法は、すべてのスレッドに渡され、queue.get()でブロックされるキューを持つことです。メッセージがキューから受信されるたびに、それを表示し、threading.active_count()を使用して他のスレッドが存在するかどうかを確認し、そうであればqueue.get()でブロックする。これは動作しますが、ここではすべてのスレッドが終了する前にキューにメッセージを送信するという規律に従う必要があります。
これがこの動作を達成するための従来の方法であるのか、他の/より良い方法があるのでしょうか?