分享

Python爬虫的多线程实现, 神级程序员分享!

 xiaoyimin 2019-02-24

Python因为有GIL锁,多线程一直被诟病。在CPU密集型的任务场景中Python的多线程并不是很理想,而对于像网络爬虫这样的IO密集型任务场景,Python的多线程可以在一定程度上提高任务的并行度。下面我们详细说一下:

一、原理

解释一下:

master线程的run方法中,第一眼看它是个死循环,实际上它的意思是:我们从response_queue中,拿不到任务响应的时候,会抛出异常,退出循环体。拿到响应以后,调用filter方法,filter的参数是ResponseItem对象,ResponseItem中包含已抓取URL,这个方法有两个作用:第一个是保存已抓取链接,第二个是去掉待抓取链接中重复的链接。

<div '="">

三、总结一下

简单的说,主线程负责任务调度,从响应队列获取任务执行结果, 往任务队列加入新的任务,子线程负责抓取任务。从任务队列获取任务,执行完成后返回结果,存放到响应队列。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多