使用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 2020长安杯与连接网探
- ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
- ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
- ¥16 mybatis的代理对象无法通过@Autowired装填
- ¥15 可见光定位matlab仿真
- ¥15 arduino 四自由度机械臂
- ¥15 wordpress 产品图片 GIF 没法显示
- ¥15 求三国群英传pl国战时间的修改方法
- ¥15 matlab代码代写,需写出详细代码,代价私
- ¥15 ROS系统搭建请教(跨境电商用途)