文章詳情頁
python 爬蟲 解析效率如何提升?
瀏覽:113日期:2022-06-29 17:26:48
問題描述
現在采用的是在windows 環境下 采用多線程的方式進行爬取,使用beautifulsoup+lxml進行解析.
N個爬取線程->解析隊列->1個解析線程->存儲隊列->1個存儲線程
整個執行程序的效率卡在計算密集的解析線程中,如果只是增加解析線程數量的話,反而增加線程切換開銷速度變慢。
請問下 有什么辦法可以較為明顯的提升解析效率?
根據兩位大腿的說明 準備采用異步爬取->解析隊列->N個解析進程->存儲隊列->存儲線程
準備開工
問題解答
回答1:其實我覺得, 你在前面N個爬取線程 可以換成協程/線程池實現, 因為你在頻繁創建線程本省一種性能耗費, 用線程池雖然可以減少這部分的損耗, 但是上下文切換還是無法避免, 所以協程這方面, 應該是比較合適的.1個解析線程 換成 進程池,多開幾個進程去計算密集處理, 其余應該可以不用改, 如果還想再搞, 將核心部分用c/c++ 重寫咯, 希望可以幫到你
回答2:我的做法是多進程。多進程的好處是當單機性能不夠的時候,可以隨時切換為分布式爬蟲。
回答3:可以網上找下tornade異步爬蟲吧,我正在用這個
相關文章:
1. mysql數據庫每次查詢是一條線程嗎?2. javascript - 前端開發 本地靜態文件頻繁修改,預覽時的緩存怎么解決?3. android - 優酷的安卓及蘋果app還在使用flash技術嗎?4. 使用uuid,并不能利用mysql的索引,有什么解決辦法?5. javascript - 數組原聲方法中的一段代碼6. JavaScript如何循序漸進,有效的學習?看不下去怎么辦?7. docker不顯示端口映射呢?8. java - public <T> T findOne(T record) 這是什么意思9. css - 關于ul的布局10. python - linux怎么在每天的凌晨2點執行一次這個log.py文件
排行榜
