文章詳情頁
python 爬蟲 解析效率如何提升?
瀏覽:122日期:2022-06-29 17:26:48
問題描述
現在采用的是在windows 環境下 采用多線程的方式進行爬取,使用beautifulsoup+lxml進行解析.
N個爬取線程->解析隊列->1個解析線程->存儲隊列->1個存儲線程
整個執行程序的效率卡在計算密集的解析線程中,如果只是增加解析線程數量的話,反而增加線程切換開銷速度變慢。
請問下 有什么辦法可以較為明顯的提升解析效率?
根據兩位大腿的說明 準備采用異步爬取->解析隊列->N個解析進程->存儲隊列->存儲線程
準備開工
問題解答
回答1:其實我覺得, 你在前面N個爬取線程 可以換成協程/線程池實現, 因為你在頻繁創建線程本省一種性能耗費, 用線程池雖然可以減少這部分的損耗, 但是上下文切換還是無法避免, 所以協程這方面, 應該是比較合適的.1個解析線程 換成 進程池,多開幾個進程去計算密集處理, 其余應該可以不用改, 如果還想再搞, 將核心部分用c/c++ 重寫咯, 希望可以幫到你
回答2:我的做法是多進程。多進程的好處是當單機性能不夠的時候,可以隨時切換為分布式爬蟲。
回答3:可以網上找下tornade異步爬蟲吧,我正在用這個
相關文章:
1. javascript - 按鈕鏈接到另一個網址 怎么通過百度統計計算按鈕的點擊數量2. sql語句 - 如何在mysql中批量添加用戶?3. mysql 可以從 TCP 連接但是不能從 socket 鏈接4. mysql - PHP定時通知、按時發布怎么做?5. 怎么php怎么通過數組顯示sql查詢結果呢,查詢結果有多條,如圖。6. mysql - JAVA怎么實現一個DAO同時實現查詢兩個實體類的結果集7. 事務 - mysql共享鎖lock in share mode的實際使用場景8. mysql建表索引問題求助9. mysql - 數據庫建字段,默認值空和empty string有什么區別 11010. mysql 非主鍵做范圍查找實現原理的一點困惑
排行榜
