我有一个python程序,产生了一些线程。这些线程持续2秒到30秒。在每个线程完成并打印消息时,我都希望跟踪主线程。如果我只是依次.join()所有线程,并且第一个线程持续30秒,其他线程完成得更快,我将无法更快地打印消息 - 所有消息都将在30秒后打印。在Python线程中,我如何跟踪线程的完成?
基本上我想阻止,直到任何线程完成。一旦一个线程完成,打印一条关于它的消息并返回到阻塞,如果任何其他线程仍然存在。如果所有线程都完成,则退出程序。
我可以想到的一种方法是将一个队列传递给所有线程并阻塞queue.get()。每当收到来自队列的消息时,打印它,使用threading.active_count()检查是否有其他线程处于活动状态,如果是,则返回到queue.get()上的阻塞。这将工作,但在这里所有的线程都需要遵循在终止之前将消息发送到队列的规则。
我在想,这是实现这种行为的传统方式还是有其他更好的方法?