84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
現在採用的是在windows 環境下 採用多執行緒的方式進行爬取,使用beautifulsoup lxml進行解析.
N個爬取執行緒->解析佇列->1個解析執行緒->儲存佇列->1個儲存執行緒
整個執行程式的效率卡在計算密集的解析執行緒中,如果只是增加解析執行緒數量的話,反而增加執行緒切換開銷速度變慢。
請問下 有什麼辦法可以較為明顯的提升解析效率?
根據兩位大腿的說明 準備採用非同步爬取->解析佇列->N個解析進程->儲存佇列->儲存執行緒
準備開工
其實我覺得, 你在前面N個爬取線程可以換成協程/線程池實現, 因為你在頻繁創建線程本省一種性能耗費, 用線程池雖然可以減少這部分的損耗,但是上下文切換還是無法避免, 所以協程這方面, 應該是比較合適的.1個解析線程換成進程池,多開幾個進程去計算密集處理, 其餘應該可以不用改, 如果還想再搞, 將核心部分用c/c++重寫咯, 希望可以幫到你
N個爬取線程
協程/線程池
1個解析線程
進程池
c/c++
我的做法是多進程。多進程的好處是當單機效能不夠的時候,可以隨時切換為分散式爬蟲。
可以上網找下tornade異步爬蟲吧,我正在用這個
其實我覺得, 你在前面
N個爬取線程
可以換成協程/線程池
實現, 因為你在頻繁創建線程本省一種性能耗費, 用線程池雖然可以減少這部分的損耗,但是上下文切換還是無法避免, 所以協程這方面, 應該是比較合適的.1個解析線程
換成進程池
,多開幾個進程去計算密集處理, 其餘應該可以不用改, 如果還想再搞, 將核心部分用c/c++
重寫咯, 希望可以幫到你我的做法是多進程。多進程的好處是當單機效能不夠的時候,可以隨時切換為分散式爬蟲。
可以上網找下tornade異步爬蟲吧,我正在用這個