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