python 爬蟲 解析效率如何提升?
問題描述
現(xiàn)在采用的是在windows 環(huán)境下 采用多線程的方式進(jìn)行爬取,使用beautifulsoup+lxml進(jìn)行解析.
N個爬取線程->解析隊(duì)列->1個解析線程->存儲隊(duì)列->1個存儲線程
整個執(zhí)行程序的效率卡在計(jì)算密集的解析線程中,如果只是增加解析線程數(shù)量的話,反而增加線程切換開銷速度變慢。
請問下 有什么辦法可以較為明顯的提升解析效率?
根據(jù)兩位大腿的說明 準(zhǔn)備采用異步爬取->解析隊(duì)列->N個解析進(jìn)程->存儲隊(duì)列->存儲線程
準(zhǔn)備開工
問題解答
回答1:其實(shí)我覺得, 你在前面N個爬取線程 可以換成協(xié)程/線程池實(shí)現(xiàn), 因?yàn)槟阍陬l繁創(chuàng)建線程本省一種性能耗費(fèi), 用線程池雖然可以減少這部分的損耗, 但是上下文切換還是無法避免, 所以協(xié)程這方面, 應(yīng)該是比較合適的.1個解析線程 換成 進(jìn)程池,多開幾個進(jìn)程去計(jì)算密集處理, 其余應(yīng)該可以不用改, 如果還想再搞, 將核心部分用c/c++ 重寫咯, 希望可以幫到你
回答2:我的做法是多進(jìn)程。多進(jìn)程的好處是當(dāng)單機(jī)性能不夠的時候,可以隨時切換為分布式爬蟲。
回答3:可以網(wǎng)上找下tornade異步爬蟲吧,我正在用這個
相關(guān)文章:
1. javascript - 用js實(shí)現(xiàn)遠(yuǎn)程js調(diào)用時出現(xiàn)時間機(jī)制問題怎樣解決?2. javascript - 如何合并數(shù)組里某個key值一樣的對象,合并后把不相同的值放到一個數(shù)組3. javascript - 關(guān)于微信公眾號開發(fā)的一個trouble!4. html5 - z-index在瀏覽器調(diào)試有效 手機(jī)測試無效5. javascript - 微信公眾號網(wǎng)頁使用redux如何管理用戶刷新?6. javascript - 微信小程序 如何實(shí)現(xiàn)這種左滑動出現(xiàn)刪除的辦法?有相關(guān)api嗎?7. css3 - 求clearfix使用方法8. html5 - svg標(biāo)簽如何兼容IE89. html5 - webapp中將錄下的視頻,照片上傳服務(wù)器之前,需要如何處理(轉(zhuǎn)變格式?),降低對服務(wù)器的壓力?10. javascript - vue.js 中2個v-if 怎么處理?
