最近準備爬取某電商網站的數據,先不考慮代理、分散式,先說效率問題(當然你要是請求的太快就會被封掉),步入正題。一般情況下小白的我們第一個想到的是for循環,這個可是單線程啊。那我們考慮for迴圈直接開他個5個線程,問題來了,如果有一個url請求還沒回來,後面的就乾等,這麼多線程等於沒用。
效能考慮
確定要用多執行緒或多進程了,那我們到底是用多執行緒還是多進程,有些人對多進程和多執行緒有一定的偏見,就因為python的GIL鎖,下面我們說這兩個東西的差別。
多執行緒
一般情況下我們啟動一個.py文件,就等於啟動了一個進程,一個進程裡面預設有一個執行緒工作,我們使用的多執行緒的意思就是在一個行程裡面啟用多個執行緒。
但問題來了,為什麼要使用多執行緒呢?
我知道啟動一個進程的時候需要創建一些記憶體空間,就相當於一間房子,我們要在這個房子裡面幹活,你可以想一個人就等於一個線程,你房子裡面有10個人的空間跟有20個人的空間,正常情況下是不一樣的,因為我們知道線程和線程之間默認是可以通信的(進程之間默認是不可以通信的,不過可以用技術實現,比如說管道)。可以多執行緒為了保證計算資料的正確性,所以出現了GIL鎖,保證同一時間只能有一個執行緒在計算。
GIL鎖你可以基本理解為,例如在這個房間裡要算一筆賬,在同一時間內只能有一個人在算這筆賬,想一個問題,如果這筆賬5個人就能算清楚,我需要10平米的房間就行,那為什麼要請10個人,花20平米呢?所以並不是開的線程越多越好。但是,但是,但是,注意大家不用動腦筋(CPU計算)算這筆帳的時候可以去幹別的事(比如說5個人分工,各算一部分),比如說各自把自己算完後的結果記錄在賬本上以便後面對賬,這個的話每個人都有自己的賬本,所以多線程適合IO操作,記住了就算是適合IO操作,也不代表說人越多越好,所以這個量還是得根據實際情況而定。
以上是python爬蟲多少線程合適的詳細內容。更多資訊請關注PHP中文網其他相關文章!