python爬虫用多线程还是多进程_爬虫进阶Python多线程和多进程

本文探讨了Python中多线程的使用,指出由于GIL的存在,多线程在Python中并不适合用于CPU密集型任务。文章通过实例展示了如何使用线程和队列进行爬虫开发,并介绍了线程同步的重要性,如锁的使用以避免数据不同步问题。最后提到了线程优先级队列和多进程作为替代方案。
摘要由CSDN通过智能技术生成

Python多线程,thread标准库。都说Python的多线程是鸡肋,推荐使用多进程。

93060ae298bd7e5a76d51a251af6967cb25.jpg

Python为了安全考虑有一个GIL。每个CPU在同一时间只能执行一个线程

GIL的全称是Global Interpreter Lock(全局解释器锁),就相当于通行证,每一次线程会先要去申请通行证,通行证申请下来了,才能进入CPU执行。

每个线程的执行方式:

1、获取GIL

2、执行代码直到sleep或者是python虚拟机将其挂起。

3、释放GIL

每次释放GIL锁,线程进行锁竞争、切换线程,会消耗资源。并且由于GIL锁存在,python里一个进程永远只能同时执行一个线程(拿到GIL的线程才能执行),这就是为什么在多核CPU上,python的多线程效率并不高。

下面使用多线程加队列做的一个demo。爬取的是笔趣阁的小说,只是做了一个打印,没有做具体的保存。爬取用的selenium。Chrome的无头模式。有点慢,可以直接用库,或者跑整站的话用scrapy.

使用Threading模块创建线程,直接从threading.Thread继承,然后重写init方法和run方法:

线程同步

如果多个线程共同对某个数据修改,则可能出现不可预料的结果,为了保证数据的正确性,需要对多个线程进行同步。

使用Thread对象的Lock和Rlock可以实现简单的线程同步,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值