gpt4 book ai didi

Python:引发异常且未处理后线程会被终止吗?

转载 作者:行者123 更新时间:2023-12-01 05:49:41 25 4
gpt4 key购买 nike

官方文档here给出以下示例:

def worker():
while True:
item = q.get()
do_work(item)
q.task_done()

q = Queue()
for i in range(num_worker_threads):
t = Thread(target=worker)
t.daemon = True
t.start()

for item in source():
q.put(item)

q.join() # block until all tasks are done

我想确保在主线程继续之前所有线程都已被终止。我想在处理完队列中的所有任务后, q.get() 方法将引发异常,这应该会杀死线程。这是正确的吗?

最佳答案

没有。如果队列中没有项目,默认情况下,get 将等待项目放入队列中。如果您希望它在没有更多项目时引发异常,请传递 block=False 或使用 get_nowait

一旦您使用非阻塞get,它应该一切正常,但在正常情况下,您的线程会因为引发异常而终止,这是相当不雅观的。我建议用 try block 包围它,如果它由于队列为空而引发异常,请彻底停止线程:

try:
item = q.get(block=False)
except queue.Empty:
return

关于Python:引发异常且未处理后线程会被终止吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14794128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com