最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • Python爬虫:生产者和消费者模式

    正文概述    2020-05-14   253

    Python爬虫:生产者和消费者模式

    认识生产者和消费者模式

    生产者和消费者是多线程中很常见的一个问题。产生数据的模块,我们称之为生产者,而处理数据的模块,就称为消费者。但是单单只有生产者和消费者显然还是不够的,一般来说,我们还有一个缓冲区,抽象出来的流程如下图所示。

    Python爬虫:生产者和消费者模式

    将这个过程以实际例子来说明:

    假如我们是一个生产辣条的厂家,我们生产出来的辣条肯定是一箱一箱地放在仓库里面,然后卖出去给消费者。【不再考虑经销商环节】

    1.我们把一箱一箱的辣条生产好。——>>>相当于生产者制造数据

    2.我们把辣条放到仓库中。——>>>相当于将数据放到缓冲区

    3.我们把辣条给取出来。——>>>相当于把数据从缓冲区取出

    4.我们把取出的辣条卖给消费者吃掉。——>>>相当于从缓冲区出来的数据经过了处理

    应用于爬虫

    Python爬虫:生产者和消费者模式

    生产者:不断产生待爬取的url。【比如需要下载图片,此时就需要不断获取图片的url】

    缓冲区:将获取到的url进行储存。

    消费者:对生产者获取到的url从缓冲区拿出来,然后发起请求。【相当于对下载url】

    对于通用爬虫(单线程)来说,我们拿到一个图片的url,然后就进行下载,效率太低。

    对于异步爬虫(多线程)来说,我们可以同时从缓冲区取出多个图片的url,然后一次多张下载。

    Queue队列线程安全

    当采用多线程的生产者和消费者模式时,生产者生产出来的数据【对应于爬虫爬取到的图片url】,将其储存于缓冲区,【缓冲区即全局变量】,此时必然面临一个问题,就是数据不同步【数据错乱】等问题,后续再执行操作就存在一定问题了。

    再举个例子:

    比如有一个列表为A=[0],此时去修改里面的值,修改实际上分为两步:第一步是选取到那个元素,第二步才是赋值修改。如果说是多线程来执行这个操作,就有可能会发生一些意想不到的错误。比如第一个线程要赋值为1,第二个线程要赋值为2。按照我们正常的理解,最终结果应该是2,但是对于多线程来说,它的结果也有可能是1。

    考虑这一种情况,当线程1选定了A[0],此时切换到了线程2,然后线程2选定了A[0],并且执行了下一步赋值的操作,这样就先将A这个列表赋值为2了,接着再次切换到了线程1,此时线程1完成赋值(因为在前面已经选定),此时最终结果变为1。所以多线程总是会面临各种数据不安全的问题。

    Python爬虫:生产者和消费者模式

    解决方案:

    1.加锁机制(已经讲过)

    2.Queue队列线程安全。

    什么是Queue队列线程安全?

    类似列表,但又不是列表。

    在Python中提供了同步的、线程安全的队列类,这些队列都实现了锁原语,能够在多线程中直接使用。可以使用队列来实现线程间的同步,即保证数据不会乱掉。

    Python爬虫:生产者和消费者模式

    众多python培训视频,尽在python学习网,欢迎在线学习!

    本文转自:https://blog.csdn.net/weixin_42830697/article/details/102957950


    起源地下载网 » Python爬虫:生产者和消费者模式

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元