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

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、付费专栏及课程。

余额充值