python 爬蟲(chóng) 解析效率如何提升?
問(wèn)題描述
現(xiàn)在采用的是在windows 環(huán)境下 采用多線程的方式進(jìn)行爬取,使用beautifulsoup+lxml進(jìn)行解析.
N個(gè)爬取線程->解析隊(duì)列->1個(gè)解析線程->存儲(chǔ)隊(duì)列->1個(gè)存儲(chǔ)線程
整個(gè)執(zhí)行程序的效率卡在計(jì)算密集的解析線程中,如果只是增加解析線程數(shù)量的話,反而增加線程切換開(kāi)銷速度變慢。
請(qǐng)問(wèn)下 有什么辦法可以較為明顯的提升解析效率?
根據(jù)兩位大腿的說(shuō)明 準(zhǔn)備采用異步爬取->解析隊(duì)列->N個(gè)解析進(jìn)程->存儲(chǔ)隊(duì)列->存儲(chǔ)線程
準(zhǔn)備開(kāi)工
問(wèn)題解答
回答1:其實(shí)我覺(jué)得, 你在前面N個(gè)爬取線程 可以換成協(xié)程/線程池實(shí)現(xiàn), 因?yàn)槟阍陬l繁創(chuàng)建線程本省一種性能耗費(fèi), 用線程池雖然可以減少這部分的損耗, 但是上下文切換還是無(wú)法避免, 所以協(xié)程這方面, 應(yīng)該是比較合適的.1個(gè)解析線程 換成 進(jìn)程池,多開(kāi)幾個(gè)進(jìn)程去計(jì)算密集處理, 其余應(yīng)該可以不用改, 如果還想再搞, 將核心部分用c/c++ 重寫(xiě)咯, 希望可以幫到你
回答2:我的做法是多進(jìn)程。多進(jìn)程的好處是當(dāng)單機(jī)性能不夠的時(shí)候,可以隨時(shí)切換為分布式爬蟲(chóng)。
回答3:可以網(wǎng)上找下tornade異步爬蟲(chóng)吧,我正在用這個(gè)
相關(guān)文章:
1. 數(shù)據(jù)庫(kù) - mysql聯(lián)表去重查詢2. 用tp5框架寫(xiě)sql語(yǔ)句3. 【python|scapy】sprintf輸出時(shí)raw_string轉(zhuǎn)string4. docker Toolbox在win10 家庭版中打開(kāi)報(bào)錯(cuò)5. mysql - 數(shù)據(jù)庫(kù)為什么需要鎖機(jī)制?6. python - 我已經(jīng)連上了美國(guó)的VPN,而且在瀏覽器里查看的game排行也是美國(guó)的,可是為啥我用代碼怎么爬都是中國(guó)地區(qū)排行7. 就一臺(tái)服務(wù)器,mysql數(shù)據(jù)庫(kù)想實(shí)現(xiàn)自動(dòng)備份,如何設(shè)計(jì)?8. mysql 能不能創(chuàng)建一個(gè) 有列級(jí)函數(shù) 的聯(lián)合視圖?9. python3.x - 關(guān)于Python圖遍歷的操作10. python小白 問(wèn)關(guān)于參數(shù)無(wú)法找到的問(wèn)題
