0
是否有一個選項來檢查隊列是否爲空,並且所有線程已經完成處理其任務(即運行task_done())?我只想在滿足這兩個條件的情況下添加其他任務。Python - 檢查隊列中的所有任務是否完成
因爲我希望能夠添加更多的任務,我不能只是退出未使用的線程,並使用activeCount()。另外我不想加入()Queue,因爲我希望能夠主動監視執行的進度。
下面是一個例子代碼:
from Queue import Queue
from threading import Thread
import time
queue = Queue()
def my_method(queue):
while True:
task = queue.get()
time.sleep((task + 2) * 3)
queue.task_done()
num_queue_threads = 2
queue_threads = [None] * num_queue_threads
for i in range(num_queue_threads):
queue_threads[i] = Thread(target=my_method, args=(queue,))
queue_threads[i].setDaemon(True)
queue_threads[i].start()
for task in range(3):
queue.put(task)
#queue.join() #need to wait actively
while True:
print("queue.qsize(): {}, queue.empty(): {}".format(queue.qsize(), queue.empty()))
time.sleep(1)
隊列只要最後的任務的執行開始是空的。
的這裏唯一的問題是我無法控制completion_queue.get()需要多長時間,所以我可能無法執行任何週期性活動。但至少我知道沒有其他推薦的方式來跟蹤未完成的任務。我可能會改變我的邏輯來使用來自sqlite的任務狀態(因爲我已經使用這個數據庫來存儲他們的元數據)。謝謝! –
另外 - 我可以用超時運行completion_queue.get(),忽略Empty異常,執行所需的週期性活動並返回到等待下一個任務。 –