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