日韩在线首页I俄罗斯pornI男女猛烈激情XX00高潮动态I超碰免费97I乱人伦99久久I欧美日韩成人一区I最新日韩视频在线观看I粉嫩AV四季AV绯色AVI五月导航

×

如何用一行代碼讓gevent爬蟲提速100%

分類:互聯網熱點 編輯:3 瀏覽量:1
2020-07-20 13:33:06

用python做網絡開發的人估計都聽說過gevent這個庫,gevent是一個第三方的python協程庫,其是在微線程庫greenlet的基礎上構建而成,并且使用了epoll事件監聽機制,這讓gevent具有很好的性能并且比greenlet更好用。根據gevent官方的資料(網址:http://www.gevent.org),gevent具有以下特點:

筆者總結一下,gevent大致原理就是當一個greenlet遇到需要等待的操作時(多為IO操作),比如網絡IO/睡眠等待,這時就會自動切換到其他的greenlet,等上述操作完成后,再在適當的時候切換回來繼續執行。在這個過程中其實仍然只有一個線程在執行,但因為我們在等待某些IO操作時,切換到了其他操作,避免了無用的等待,這就為我們大大節省了時間,提高了效率。

筆者也是在看了gevent這么多的優點之后,感覺有必要上手試一試,但起初效果非常不理想,速度提升并不大,后來在仔細研究了gevent的用法之后,發現gevent的高效率是有條件的,而其中一個重要條件就是monkey patch的使用,也就是我們常說的猴子補丁。

monkey patch就是在不改變源代碼的情況下,對程序進行更改和優化,其主要適用于動態語言。通過monkey patch,gevent替換了標準庫里面大部分的阻塞式系統調用,比如socket、ssl、threading和select等,而變為協作式運行。下面筆者還是通過代碼來演示一下monkey patch的用法以及使用條件。筆者展示的這個程序是一個小型的爬 蟲程序,程序代碼量少,便于閱讀和運行,同時也能較好地測試出monkey patch的提升程度。主要思路是從Box Office Mojo網站抓取北美電影市場今年第二季度上映的電影,然后從每部電影的信息頁面提取出每部電影的電影分級,然后把每部電影的名稱和其對應分級保存在一個字典當中,再測試一下整個過程的時間。在這里,我們主要測試三種情況下的程序完成時間,分別是普通不使用gevent的爬 蟲,使用gevent但不用monkey patch的爬 蟲,以及使用gevent和monkey patch的爬 蟲。

首先看普通不使用gevent的爬 蟲。

先導入需要的庫。

然后讀取第二季度上映電影的頁面。

上述代碼中變量url就是第二季度上映電影的網頁地址,其頁面截圖如圖1所示。headers是爬蟲模擬瀏覽器的頭部信息,每部電影的信息頁面就是圖1中表格頭一行列名Release下面每部電影名稱所包含的網址,點擊每部電影名稱就可進入其對應頁面。因為這個網址是相對地址,所以要轉換成絕對地址。

圖1. 第二季度上映電影的頁面

接下來是每部電影的信息頁面的讀取。

這個函數就是為了讀取每部電影信息頁面的信息,其功能和上面讀取url頁面的功能類似,都非常簡單,沒有過多可說的。在每部電影頁面中,我們要讀取的每部電影的分級信息就在Genres這一行,比如圖2中電影The Wretched,其Genres信息就是Horror。

圖2. 示例電影信息頁面

接下來是時間測算。

我們測算時間用time.time()方法,用結束時間減去開始時間就是程序運行時間,這里我們主要測試spider這個函數多次運行的時間。結果顯示,該過程耗時59.6188秒。

第二個爬蟲是使用gevent但不用monkey patch的爬蟲。其完整代碼如下。

這里絕大部分代碼和前面爬蟲代碼相同,但多了一個task_list變量,其是用于存放協程的列表,我們從gevent_start = time.time()這行開始看,因為前面的代碼都和之前的爬蟲相同。task = gevent.spawn(spider, u)是生成gevent中生成協程的方法,task_list.append(task)是把每個協程放入這個列表中,而gevent.joinall(task_list)就是運行所有協程。上面這些過程和我們運行多線程的方式非常相似。運行結果是59.1744秒。

最后一個爬蟲就是同時使用gevent和monkey patch的爬蟲,在這里筆者不再粘貼代碼,因為其代碼和第二個爬蟲幾乎一模一樣,只有一個區別,就是多了一行代碼from gevent import monkey; monkey.patch_all(),注意這是一行代碼,不過包含兩個語句,用分號放在了一起。最重要的是,這行代碼要放在所有代碼的前面,切記!!!

這個爬蟲的運行結果是26.9184秒。

筆者把這里三個爬蟲分別放在三個文件中,分別命名為normal_spider.py、gevent_spider_no.py和gevent_spider.py,分別表示普通不用gevent的爬蟲、使用gevent但不用monkey patch的爬蟲、使用gevent和monkey patch的爬蟲。這里有一點要注意,monkey patch暫不支持jupyter notebook,所以這三個程序要在命令行中使用,不能在notebook中使用。

最后把三種爬蟲的結果總結如下。

圖3. 三種爬蟲的結果對比

可以看出使用了gevent但不用monkey patch的爬蟲和普通爬蟲的運行時間幾乎完全相等,而在用了monkey patch以后,運行時間只有前面程序的一半不到,速度提升了大約120%,僅僅一行代碼就帶來如此大的速度提升,可見monkey patch的作用還是很大的。而對于前兩個爬蟲的速度幾乎完全一樣,筆者認為原因在于這兩個程序都是單線程運行,本質上沒有太大區別,同時網頁讀取數量較?。ㄖ挥?8個網頁),也很難看出gevent的效果。

從本例中可以看出monkey patch還是有不小提升的,但gevent目前只對常見庫尤其是官方標準庫有patch作用,其他第三方庫的效果還不得而知,所以對monkey patch的使用還是要視情況而定。本文的代碼筆者放在gitee代碼網站上,網址是https://gitee.com/leonmovie/speed-up-gevent-spider-with-monkey-patch,如有需要可以自行下載。

【責任編輯:龐桂玉 TEL:(010)68476606】

聲明:免責聲明:本文內容由互聯網用戶自發貢獻自行上傳,本網站不擁有所有權,也不承認相關法律責任。如果您發現本社區中有涉嫌抄襲的內容,請發

送郵件至:operations@xinnet.com進行舉報,并提供相關證據,一經查實,本站將立刻刪除涉嫌侵權內容。本站原創內容未經允許不得轉載,或轉載時

需注明出處:新網idc知識百科

免費咨詢獲取折扣

Loading
主站蜘蛛池模板: 亚洲精品无码人妻无码 | www777含羞草 | 国产免费av片在线观看 | 六月婷婷网 | 人妻无码αv中文字幕久久琪琪布 | 韩国无码色视频在线观看 | 久久久久久a亚洲欧洲av冫 | 国产真实露脸多p视频播放 亚洲高清免费视频 | 久久亚洲激情 | 又大又黄又爽视频一区二区 | 日本高清免费毛片大全awaaa | 人人妻人人澡人人爽不卡视频 | 男女做爰猛烈叫床爽爽免费网站 | 亚洲人 女学生 打屁股 得到 | 亚洲欧美成人片在线观看 | 国产成人愉拍免费视频 | 亚洲精品无码专区久久 | 日本熟妇色xxxxx日本妇 | 日韩a视频 | 国产午夜福利精品久久 | 91丨九色丨蝌蚪丨丝袜 | 成人午夜无码专区性视频性视频 | 亚洲美女牲交高清淅视频 | 熟妇乱子作爱视频大陆 | 国产美a三级三级看三级 | 亚洲视屏一区 | 国产免费丝袜调教视频免费的 | 一区二视频| av黄色在线看 | 美女无遮挡免费网站 | 人妻少妇精品无码系列 | 色欲天天天天天综合网 | 国产成人精品免费视频大全五级 | 欧美在线天堂 | 欧洲丰满少妇做爰视频爽爽 | 91狠狠爱 | 日本亚洲色大成网站www | 中文字幕文字暮 | 毛片毛片毛片毛片 | 黄色一级免费视频 | 亚洲中文无码av永久不收费 | 亚洲综合一区二区三区四区五区 | 亚洲欧美激情另类 | 97人妻无码专区 | 快色视频在线观看 | 免费一级做a爰片蜜桃 | 天天插综合 | 一区二区视频 | 91国偷自产一区二区三区蜜臀 | 少妇久久久久久被弄高潮 | 精品乱码一区内射人妻无码 | 久久国产精品人妻丝袜 | 99久久国产综合精品成人影院 | 黑人巨大精品欧美一区二区小视频 | 丰满少妇人妻无码 | 欧美老熟妇乱人伦人妻 | 香蕉av福利精品导航 | 好色视频tv | 日韩一级色片 | 亚洲日本va午夜中文字幕久久 | 都市激情自拍 | 欧美日韩精品一二三区 | 张柏芝hd一区二区 | 国产女同无遮挡互慰高潮91 | 无码免费大香伊蕉在人线国产 | 国产成人亚洲精品无码影院bt | 亚洲国产成人一区二区三区 | 人人干在线观看 | 色亚洲天堂| 色婷婷av一区二区三区丝袜美腿 | 男人撕开奶罩揉吮奶头视频 | 巨胸美女爆视频网站 | 超清无码一区二区三区 | 女同互慰高潮呻吟免费播放 | 青青草超碰| 国产亚洲欧美日韩夜色凹凸成人 | 精品麻豆一卡2卡三卡4卡乱码 | 免费毛片a线观看 | 欧美不卡无线在线一二三区观 | 亚洲精品高潮 | 亚洲自拍偷拍一区二区三区 | 亚洲国产精品热久久 | 中文字幕播放 | 中国a毛片 | 97操碰 | 丰满多毛的大隂户毛茸茸 | 大粗鳮巴久久久久久久久 | 国产精品亚洲专区无码牛牛 | 亚洲综合图色40p | 女人高潮喷水毛片免费 | 非洲黑人最猛性xxxx交 | 夜夜综合 | 成人性做爰av片免费看 | 九一成人网 | 91性| 三级黄色毛片 | 婷婷五月综合色中文字幕 | 真人无码作爱免费视频 | 日韩精品一区二区在线播放 |