python – 如何在退出主线程之前确保队列为空

python – 如何在退出主线程之前确保队列为空,第1张

概述我有一个程序有两个线程,主线程和一个附加的处理来自FIFO队列的作业. 像这样的东西: import queueimport threadingq = queue.Queue()def _worker(): while True: msg = q.get(block=True) print(msg) q.task_done()t = threa 我有一个程序有两个线程,主线程和一个附加的处理来自FIFO队列的作业.
像这样的东西:

import queueimport threadingq = queue.Queue()def _worker():  while True:      msg = q.get(block=True)      print(msg)      q.task_done()t = threading.Thread(target=_worker)#t.daemon = Truet.start()q.put('asdf-1')q.put('asdf-2')q.put('asdf-4')q.put('asdf-4')

我想要完成的基本上是确保在主线程退出之前清空队列.
如果我将t.daemon设置为True,程序将在队列清空之前退出,但是如果它被设置为False,程序将永远不会退出.有没有办法确保运行_worker()方法的线程清除主线程退出的队列?

解决方法 评论涉及使用.join(),但根据您的使用案例,使用连接可能会使线程毫无意义.

我假设您的主线程将执行除将项添加到队列之外的其他 *** 作 – 并且可能随时关闭,您只需要确保在关闭完成之前您的队列为空.

在主线程结束时,您可以在循环中添加一个简单的空检查.

while not q.empty():    sleep(1)

如果你没有设置t.daemon = True,那么线程永远不会完成.将线程设置为守护程序线程意味着线程不会导致程序在主线程完成时保持运行.

总结

以上是内存溢出为你收集整理的python – 如何在退出主线程之前确保队列为空全部内容,希望文章能够帮你解决python – 如何在退出主线程之前确保队列为空所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1197466.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存