另外请问一下使用
queue.join() queue.task_done()
和
while not workQueue.empty(): pass
这两种方式来判断队列中是否还有任务的机制有区别吗?哪种更好呢?
学习是最好的投资!
具體要看你的設計和使用場景。 queue.join會一直阻塞,直到佇列中所有的message都被get出來並且呼叫task_done才會回傳。通常用在等待所有的任務都處理完了,然後退出進程。 empty會立刻返回,用你的while循環檢查時,如果隊列為空線程會一直用死循環。循環等待會很耗CPU。
具體要看你的設計和使用場景。
queue.join會一直阻塞,直到佇列中所有的message都被get出來並且呼叫task_done才會回傳。通常用在等待所有的任務都處理完了,然後退出進程。
empty會立刻返回,用你的while循環檢查時,如果隊列為空線程會一直用死循環。循環等待會很耗CPU。