3
我有一個程序有兩個線程,主線程和一個處理來自FIFO隊列的作業的附加程序。 事情是這樣的:如何在退出主線程之前確保隊列爲空
import queue
import threading
q = queue.Queue()
def _worker():
while True:
msg = q.get(block=True)
print(msg)
q.task_done()
t = threading.Thread(target=_worker)
#t.daemon = True
t.start()
q.put('asdf-1')
q.put('asdf-2')
q.put('asdf-4')
q.put('asdf-4')
我想做到的是基本上以確保隊列主線程退出之前清空。 如果我將t.daemon設置爲True,程序將在隊列清空之前退出,但如果設置爲False,程序將永遠不會退出。有什麼方法可以確保運行_worker()方法的線程清除主線程出口上的隊列嗎?
我不是一個併發編程專家,但可能需要在程序結束時添加't.join()',以使主線程等待't'完成執行。 – ozgur
@ozgur:線程永遠不會終止,無限循環..所以使用連接將無法工作 - https://docs.python.org/2/library/threading.html#threading.Thread.join – Niklas9
你爲什麼打電話'q.get'上的'block = True'?即使隊列被清空,它也不會退出。 – ozgur