高效能非同步爬蟲

2022-09-04 21:15:19 字數 693 閱讀 6930

目的:在爬蟲中使用非同步實現高效能的資料爬取操作。
非同步爬蟲的方式:

- 多執行緒: 多程序(不建議):

弊端:無法無限制的開啟多執行緒或者多程序;

- 執行緒池、程序池(適當的使用):

好處:可以降低系統對程序或者執行緒建立和銷毀的乙個頻率,從而很好的降低系統的開銷;

弊端:池中線程或程序的數量是有上限;

from multiprocessing.dummy import pool
#例項化乙個執行緒池物件

pool = pool(4)

#將列表中每乙個列表元素傳遞給get_page進行處理。

pool.map(要執行非同步操作的函式,函式的引數)

pool.close()

event_loop:事件迴圈,相當於乙個無限迴圈,我們可以把一些函式註冊到這個事件迴圈上,當滿足某些條件的時候,函式就會被迴圈執行。

coroutine:協程物件,我們可以將協程物件註冊到事件迴圈中,他會被事件迴圈呼叫,我們可以使用,async關鍵字來定義乙個方法,這個方法在呼叫時不會立即被執行,而是返回乙個協程物件。

task:任務,他是對協程物件的進一步封裝,包含了任務的各個狀態;

future:代表將來執行或還沒執行的任務,實際上和task沒有本質區別;

async:定義乙個協程;

await:用來掛起阻塞方法的執行;

高效能非同步爬蟲概述

同步呼叫 即提交乙個任務後就在原地等待任務結束,等到拿到任務的結果後再繼續下一行 效率低下,呼叫乙個任務,就在原地等待任務結束拿到結果後才繼續往後執行。好處 在伺服器端使用多執行緒 或多程序 的目的是讓每個連線都擁有獨立的執行緒 或程序 這樣任何乙個連線的阻塞都不會影響其他的連線。缺點 在遇到要同時...

高效能 爬蟲原理

socket 原理 本質上就是乙個socket服務端,乙個客戶端.客戶端在連線服務端的時候只是封裝了http協議頭以及訪問的位址 阻塞 import socket 阻塞 請求 非阻塞 http用的就是這種 請求方式,請求只管發出去,而阻塞的方式還等請求連線成功再發訊息。mport socket ip...

muduo的高效能非同步日誌

1 乙個日誌庫大體可分為前端 frontend 與後端 backend 前端是 用程式使用的介面 api 並生成日誌資訊 後端則是負責將日誌資訊寫到目的地。每個執行緒都有自己的前端,而整個程式共用乙個後端。對於生產者 前端 而言,要盡量做到低延遲 低cpu開銷 無阻塞 對消費者 後端 而言,要盡量做...