使用while not url_queue.empty(),不会执行,用IF判断后发现url_queue一直为空,.empty()为TRUE,
而使用while True,虽然能够开始运行,但是执行完毕,队列空了后会卡住不会自动结束
Python multiprocessing Queue为什么判断队列一直是空的呢?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- ShowMeAI 2023-01-17 10:46关注
在使用 multiprocessing.Queue 时,队列是在不同进程中共享的。如果您在一个进程中检查队列是否为空,而在另一个进程中将元素添加到队列中,则可能会出现队列被认为是空的情况。
队列是空的,原因可能是你的生产者线程已经结束并将所有的数据放入队列了,而消费者线程还没有消费完。
为了避免这种情况,您可以使用 Queue 类中的 join() 方法,它将阻塞直到队列中的所有元素都被消费。
url_queue.join()
您还可以使用 task_done() 方法来通知队列已经完成了某个任务。在消费者线程中,每当它处理完队列中的一个元素时,都应该调用 task_done()。
while not url_queue.empty(): url = url_queue.get() process_url(url) url_queue.task_done()
这样生产者线程在放入一个元素后会调用 put(),消费者线程在消费一个元素后会调用 task_done(),这样就能检测队列中元素是否全部被消费。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 永磁直线电机的电流环pi调不出来
- ¥15 用stata实现聚类的代码
- ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
- ¥20 docker里部署springboot项目,访问不到扬声器
- ¥15 netty整合springboot之后自动重连失效
- ¥15 悬赏!微信开发者工具报错,求帮改
- ¥20 wireshark抓不到vlan
- ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
- ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
- ¥15 stata安慰剂检验作图但是真实值不出现在图上