我有一些工作线程使用预先填充的输入队列中的数据,并将结果放入另一个队列中。
import queue
import threading
worker_count = 8
input_queue = queue.Queue()
output_queue = queue.Queue()
threads = []
for _ in range(worker_count):
thread = threading.Thread(target=perform_work, args=(input_queue, output_queue)
thread.daemon = True
thread.start()
threads.append(thread)
我正在主线程中处理结果,并且我想确保我处理了所有结果。
while True:
try:
result = output_queue.get(True, 0.1)
except queue.Empty:
pass
else:
process_result(result)
if not any([t.is_alive() for t in threads]) and not output_queue.empty():
# All results have been processed, stop.
break
在这种情况下仅使用.is_alive()
是否安全?还是有特定的原因改用.join()
?
注意:我正在创建线程daemon = True
,因为它使调试和终止程序更加容易。