您是否应该join()一个完整的守护进程线程?

时间:2018-08-16 20:06:19

标签: python multithreading

我有一些工作线程使用预先填充的输入队列中的数据,并将结果放入另一个队列中。

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,因为它使调试和终止程序更加容易。

0 个答案:

没有答案