你可以加入Python队列而不会阻塞吗?

时间:2015-03-26 23:23:50

标签: python multithreading queue

Python的Queue有一个join()方法,该方法会阻止在从队列中取出的所有项目上调用task_done()

有没有办法定期检查这种情况,或者在事件发生时接收事件,以便您可以在此期间继续做其他事情?当然,您可以检查队列是否为空,但这并不能告诉您未完成任务的数量是否实际为零。

1 个答案:

答案 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的状态。