python爬蟲13 | 秒爬,這多線程爬取速度也太猛了,這次就是要讓你的爬蟲效率杠杠的


 

快了

 

 

 

 

 

小老弟

 

想啥呢

 

 

今天這篇爬蟲教程的主題就是一個字

 

 

想要做到秒爬

 

就需要知道

 

什么是多進程

 

什么是多線程

 

什么是協程(微線程)

 

你先去沏杯茶

 

坐下來

 

小帥b這就好好給你說道說道

 

關於線程這玩意

 

沏好茶了嗎

 

那么

 

接下來就是

 

學習 python 的正確姿勢

 

 

 

首先我們來了解什么是進程

 

進程就是正在運行的程序

 

比如你的系統現在運行着的微信

 

就是一個進程

 

一旦你的「微信」運行起來

 

系統就會給「微信」分配了內存和資源

 

那什么是單進程呢?

 

單進程就是說你的電腦只能做一件事情

 

比如

 

你在電腦打開了微信

 

就不能再去打開淘寶了

 

 

但是你會發現

 

現在你的電腦

 

很是牛逼

 

可以一邊看片一邊聽歌

 

可以一邊玩游戲一邊擼代碼

 

這就是多進程

 

你的電腦

 

在同一段時間里面

 

可以 “同時” 執行多個任務

 

這樣是不是提高了你家 CPU 的使用率了呢

 

其實

 

一個單核的 CPU 在一個時間點上只能運行一個程序

 

之所以你能感覺到你電腦上的程序在同時運行

 

是因為

 

CPU 在做着切換

 

因為 CPU 的切換速度超級快

 

 

快到讓你感覺到

 

你開着的所有程序好像是在同時運行

 

 

知道了什么是進程之后

 

我們再來談談線程

 

在一個進程里面

 

可以執行多個任務

 

在這里的每一個任務就是線程

 

線程可以說是程序用 CPU 的一個基本單元

 

所以

 

一個程序里面如果只是單一的一個執行路徑

 

那么它就是單線程的

 

一個程序如果有多個執行路徑

 

那么它就是多線程的

 

所以你想要讓你的爬蟲高效

 

就可以讓你的爬蟲實現多線程

 

這樣它就可以有更加高的幾率搶到 CPU 的執行權

 

 

每當小帥b跟別人吹線程的時候

 

還會說到並行並發

 

我們剛剛說了

 

一個單核的 CPU

 

它每次只能執行一個進程

 

那么如果是多核的 CPU 呢

 

是不是就可以同時執行多個進程了

 

這就是並行

 

在某一個時間段里,可以同時執行多個進程

 

而並發呢

 

就是在一個時間點,同時執行多個進程

 

你想想

 

在雙十一的時候

 

是不是在那個晚上的 12 點

 

很多人同時秒殺了某一個商品

 

這就是並發

 

 

在系統里面

 

進程和進程之間是互相獨立的

 

而一個進程里面的多個線程

 

這些線程之間是共享一個進程空間的

 

這個時候

 

線程就要搞事情了

 

畢竟一塊蛋糕被共享

 

誰都想多分一點

 

就擠破頭的想要搶占多一點資源

 

哇靠啊

 

這可不行啊

 

這樣數據就不安全了

 

所以就有了互斥鎖

 

所謂互斥鎖

 

就是讓線程乖一點

 

別他媽的亂來

 

一個一個線程安全有序的去執行

 

 

 

在 python 里呢

 

有一個叫做 GIL

 

這個鎖是干嘛的呢

 

它就是用來控制線程執行權限的

 

所以當一個線程需要執行的時候

 

要先獲得 GIL 之后才可以執行

 

這樣就不會產生線程安全問題

 

但有一個問題是

 

那他媽的還多線程個毛啊?

 

恩..有一點是

 

在 I/O 流阻塞的時候,GIL會被釋放

(I/O流就是輸入輸出流,如果你此刻不太理解這個概念也沒關系)

 

 

 

所以呀

 

我們的 Python 程序

 

如果是要處理多任務,想要充分的去利用我們多核的CPU

 

就開啟多進程(multiprocessing)

 

而對於一些輸入輸出的多任務

 

就開啟多線程(threading.Thread、multiprocessing.dummy)

 

 

哦對了

 

還有一個玩意叫做協程

 

協程也叫做微線程

 

在一個線程里面可以執行多個函數

 

線程和進程是通過系統調度的

 

而微線程則不需要,可以根據需要自己調度

 

因為微線程是函數之間在切換

 

所以開銷很小

 

在 python 中使用微線程時一般會用到 genvent、monkey.patch_all

 

 

 

本篇就到這里

 

主要讓你理解這幾個概念

 

下一篇

 

 小帥b就會使用多進程、多線程、協程的方式來實現 python 的爬蟲

 

敬請

 

 

 

近期文章

 

python爬蟲12 | 爸爸,他使壞,用動態的 Json 數據,我要怎么搞?

 

python爬蟲11 | 這次,將帶你爬取b站上的NBA形象大使蔡徐坤和他的球友們

 

 

掃一掃

學習 Python 沒煩惱

 

 

 

 

      點個好看啊~~(破音)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM