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

 

快了

 

 

 

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

 

 

小老弟

 

想啥呢

 

 

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

 

 

想要做到秒爬

 

就需要知道

 

什么是多进程

 

什么是多线程

 

什么是协程(微线程)

 

你先去沏杯茶

 

坐下来

 

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

 

关于线程这玩意

 

沏好茶了吗

 

那么

 

接下来就是

 

学习 python 的正确姿势

 

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

 

 

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

 

进程就是正在运行的程序

 

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

 

就是一个进程

 

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

 

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

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

 

那什么是单进程呢?

 

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

 

比如

 

你在电脑打开了微信

 

就不能再去打开淘宝了

 

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

 

但是你会发现

 

现在你的电脑

 

很是牛逼

 

可以一边看片一边听歌

 

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

 

这就是多进程

 

你的电脑

 

在同一段时间里面

 

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

 

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

 

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

其实

 

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

 

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

 

是因为

 

CPU 在做着切换

 

因为 CPU 的切换速度超级快

 

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

 

快到让你感觉到

 

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

 

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

 

知道了什么是进程之后

 

我们再来谈谈线程

 

在一个进程里面

 

可以执行多个任务

 

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

 

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

 

所以

 

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

 

那么它就是单线程的

 

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

 

那么它就是多线程的

 

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

 

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

 

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

 

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

 

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

 

还会说到并行并发

 

我们刚刚说了

 

一个单核的 CPU

 

它每次只能执行一个进程

 

那么如果是多核的 CPU 呢

 

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

 

这就是并行

 

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

 

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

而并发呢

 

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

 

你想想

 

在双十一的时候

 

是不是在那个晚上的 12 点

 

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

 

这就是并发

 

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

 

在系统里面

 

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

 

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

 

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

 

这个时候

 

线程就要搞事情了

 

毕竟一块蛋糕被共享

 

谁都想多分一点

 

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

 

哇靠啊

 

这可不行啊

 

这样数据就不安全了

 

所以就有了互斥锁

 

所谓互斥锁

 

就是让线程乖一点

 

别他妈的乱来

 

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

 

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

 

 

在 python 里呢

 

有一个叫做 GIL

 

这个锁是干嘛的呢

 

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

 

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

 

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

 

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

 

但有一个问题是

 

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

 

恩..有一点是

 

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

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

 

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

 

 

所以呀

 

我们的 Python 程序

 

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

 

就开启多进程(multiprocessing)

 

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

 

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

 

 

哦对了

 

还有一个玩意叫做协程

 

协程也叫做微线程

 

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

 

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

 

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

 

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

 

所以开销很小

 

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

 

 

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

 

本篇就到这里

 

主要让你理解这几个概念

 

下一篇

 

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

 

敬请

 

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

 

 

近期文章

 

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

 

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

 

 

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

扫一扫

学习 Python 没烦恼

 

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

 

 

 

      点个好看啊~~(破音)

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