Python的Queue
有一个join()
方法,该方法会阻止在从队列中取出的所有项目上调用task_done()
。
有没有办法定期检查这种情况,或者在事件发生时接收事件,以便您可以在此期间继续做其他事情?当然,您可以检查队列是否为空,但这并不能告诉您未完成任务的数量是否实际为零。
答案 0 :(得分:2)
Python Queue
本身不支持此功能,因此您可以尝试以下
from threading import Thread
class QueueChecker(Thread):
def __init__(self, q):
Thread.__init__(self)
self.q = q
def run(self):
q.join()
q_manager_thread = QueueChecker(my_q)
q_manager_thread.start()
while q_manager_thread.is_alive():
#do other things
#when the loop exits the tasks are done
#because the thread will have returned
#from blocking on the q.join and exited
#its run method
q_manager_thread.join() #to cleanup the thread
while
位上的thread.is_alive()
循环可能不是您想要的,但至少您可以看到如何异步检查q.join
的状态。