python爬虫13 | 秒爬,这多线程爬取速度也太猛了,这次就是要让你的爬虫效率杠杠的


快了




python爬虫13 | 秒爬,这多线程爬取速度也太猛了,这次就是要让你的爬虫效率杠杠的



小老弟


想啥呢



今天这篇爬虫教程的主题就是一个字



想要做到秒爬


就需要知道


什么是多进程


什么是多线程


什么是协程(微线程)


你先去沏杯茶


坐下来


小帅b这就好好给你说道说道


关于线程这玩意


沏好茶了吗


那么


接下来就是


学习 python 的正确姿势


python爬虫13 | 秒爬,这多线程爬取速度也太猛了,这次就是要让你的爬虫效率杠杠的



首先我们来了解什么是进程


进程就是正在运行的程序


比如你的系统现在运行着的微信


就是一个进程


一旦你的「微信」运行起来


系统就会给「微信」分配了内存和资源

python爬虫13 | 秒爬,这多线程爬取速度也太猛了,这次就是要让你的爬虫效率杠杠的

 

那什么是单进程呢?


单进程就是说你的电脑只能做一件事情


比如


你在电脑打开了微信


就不能再去打开淘宝了


python爬虫13 | 秒爬,这多线程爬取速度也太猛了,这次就是要让你的爬虫效率杠杠的


但是你会发现


现在你的电脑


很是牛逼


可以一边看片一边听歌


可以一边玩游戏一边撸代码


这就是多进程


你的电脑


在同一段时间里面


可以 “同时” 执行多个任务


这样是不是提高了你家 CPU 的使用率了呢


python爬虫13 | 秒爬,这多线程爬取速度也太猛了,这次就是要让你的爬虫效率杠杠的

其实


一个单核的 CPU 在一个时间点上只能运行一个程序


之所以你能感觉到你电脑上的程序在同时运行


是因为


CPU 在做着切换


因为 CPU 的切换速度超级快


python爬虫13 | 秒爬,这多线程爬取速度也太猛了,这次就是要让你的爬虫效率杠杠的


快到让你感觉到


你开着的所有程序好像是在同时运行


python爬虫13 | 秒爬,这多线程爬取速度也太猛了,这次就是要让你的爬虫效率杠杠的


知道了什么是进程之后


我们再来谈谈线程


在一个进程里面


可以执行多个任务


在这里的每一个任务就是线程


线程可以说是程序用 CPU 的一个基本单元


所以


一个程序里面如果只是单一的一个执行路径


那么它就是单线程的


一个程序如果有多个执行路径


那么它就是多线程的


所以你想要让你的爬虫高效


就可以让你的爬虫实现多线程


这样它就可以有更加高的几率抢到 CPU 的执行权


python爬虫13 | 秒爬,这多线程爬取速度也太猛了,这次就是要让你的爬虫效率杠杠的


每当小帅b跟别人吹线程的时候


还会说到并行并发


我们刚刚说了


一个单核的 CPU


它每次只能执行一个进程


那么如果是多核的 CPU 呢


是不是就可以同时执行多个进程了


这就是并行


在某一个时间段里,可以同时执行多个进程


python爬虫13 | 秒爬,这多线程爬取速度也太猛了,这次就是要让你的爬虫效率杠杠的

而并发呢


就是在一个时间点,同时执行多个进程


你想想


在双十一的时候


是不是在那个晚上的 12 点


很多人同时秒杀了某一个商品


这就是并发


python爬虫13 | 秒爬,这多线程爬取速度也太猛了,这次就是要让你的爬虫效率杠杠的


在系统里面


进程和进程之间是互相独立的


而一个进程里面的多个线程


这些线程之间是共享一个进程空间的


这个时候


线程就要搞事情了


毕竟一块蛋糕被共享


谁都想多分一点


就挤破头的想要抢占多一点资源


哇靠啊


这可不行啊


这样数据就不安全了


所以就有了互斥锁


所谓互斥锁


就是让线程乖一点


别他妈的乱来


一个一个线程安全有序的去执行


python爬虫13 | 秒爬,这多线程爬取速度也太猛了,这次就是要让你的爬虫效率杠杠的



在 python 里呢


有一个叫做 GIL


这个锁是干嘛的呢


它就是用来控制线程执行权限的


所以当一个线程需要执行的时候


要先获得 GIL 之后才可以执行


这样就不会产生线程安全问题


但有一个问题是


那他妈的还多线程个毛啊?


恩..有一点是


在 I/O 流阻塞的时候,GIL会被释放

(I/O流就是输入输出流,如果你此刻不太理解这个概念也没关系)


python爬虫13 | 秒爬,这多线程爬取速度也太猛了,这次就是要让你的爬虫效率杠杠的



所以呀


我们的 Python 程序


如果是要处理多任务,想要充分的去利用我们多核的CPU


就开启多进程(multiprocessing)


而对于一些输入输出的多任务


就开启多线程(threading.Thread、multiprocessing.dummy)



哦对了


还有一个玩意叫做协程


协程也叫做微线程


在一个线程里面可以执行多个函数


线程和进程是通过系统调度的


而微线程则不需要,可以根据需要自己调度


因为微线程是函数之间在切换


所以开销很小


在 python 中使用微线程时一般会用到 genvent、monkey.patch_all



python爬虫13 | 秒爬,这多线程爬取速度也太猛了,这次就是要让你的爬虫效率杠杠的


本篇就到这里


主要让你理解这几个概念


下一篇


 小帅b就会使用多进程、多线程、协程的方式来实现 python 的爬虫


敬请


python爬虫13 | 秒爬,这多线程爬取速度也太猛了,这次就是要让你的爬虫效率杠杠的



近期文章


python爬虫12 | 爸爸,他使坏,用动态的 Json 数据,我要怎么搞?


python爬虫11 | 这次,将带你爬取b站上的NBA形象大使蔡徐坤和他的球友们



python爬虫13 | 秒爬,这多线程爬取速度也太猛了,这次就是要让你的爬虫效率杠杠的

扫一扫

学习 Python 没烦恼


python爬虫13 | 秒爬,这多线程爬取速度也太猛了,这次就是要让你的爬虫效率杠杠的




      点个好看啊~~(破音)

python爬虫13 | 秒爬,这多线程爬取速度也太猛了,这次就是要让你的爬虫效率杠杠的

原文始发于微信公众号(学习python的正确姿势):python爬虫13 | 秒爬,这多线程爬取速度也太猛了,这次就是要让你的爬虫效率杠杠的

发表回复