multiprocessing里的queue和Queue里的queue有什么区别?

multiprocessing里的queue和Queue里的queue有什么区别?

为何在线程之间通信需要用到多进程里的队列?

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学,你好。

1.from queue import Queue这种方式获取的是普通队列模式,类似于Python中普通的列表,其中的元素是先进先出模式(FIFO),使用get方法获取数据会阻塞请求,直到有数据被get出为止。

2.from multiprocessing.Queue import Queue(各子进程共有)
这种方式获取的是多进程并发执行的Queue队列,专门用于解决多进程间的通信问题,也就是说异步执行的程序的信息交互需要借由该种方式进行实现。

因为进程之间不共享内存空间,所以设计了该数据结构来实现线程间的信息流通,从而达到多进程间信息闭环。

如果我的回答解决了您的疑惑,请采纳!祝学习愉快~~~~


  • SheepShake 提问者 #1
    所以老师用multiprocessing里的Queue是为了达到什么效果呢?线程不是共享上下文的吗?直接使用一个列表然后不为空时pop一个从url返回的page数据出来处理不是也可以?
    2020-04-06 18:06:16
  • 慕之熠_灿烈 回复 提问者 SheepShake #2
    用multiprocessing里的Queue是为了使得多个进程可以共享存储到Queue中的数据,线程可以共享进程内的内存地址,但是进程与进程之间的内存相互不可访问,也就是说是不共享的。你描述的“列表+pop”的方式不是进程之间的信息流通,这种方式可以使列表辅助实现,但无法使用于多个进程之间的信息传递。
    2020-04-06 18:50:19
  • SheepShake 提问者 回复 慕之熠_灿烈 #3
    我知道啊,但是老师用的是线程不是进程,所以我才问这个问题
    2020-04-06 18:54:30
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
4.入门主流框架Scrapy与爬虫项目实战
  • 参与学习           人
  • 提交作业       107    份
  • 解答问题       1672    个

Python最广为人知的应用就是爬虫了,有趣且酷的爬虫技能并没有那么遥远,本阶段带你学会利用主流Scrapy框架完成爬取招聘网站和二手车网站的项目实战。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师