[問題] 使用多執行緒抓網頁內容

作者: oarpvfpre (永遠不夠花的薪水..)   2013-12-09 16:22:13
最近在用 python 寫一個可同時抓取多個網頁的多執行緒程式
呼叫 httplib 抓某個 url 的 response code (200, 404, 403, 401...)
參考 stackoverflow 的文章,使用 threading + Queue 的方式
http://stackoverflow.com/questions/2632520/what-is-the-fastest-way-to-send-100-000-http-requests-in-python
發現好像跟自己 for loop 去做的速度差不多
研究一下之後發現,如果不牽扯到封包傳送的話
threading 的方式是可以 work 的 (直接把 httplib.getresponse 那段 mark 掉)
但是只要有傳送封包,multithread 就沒有辦法正常運作 (就只能一個一個送)
想請問各位這樣的問題是否因為 httplib, urllib, urllib2 等 lib 沒辦法同時傳送
必須使用 twisted, asyncore 等方式實作,才能滿足我的需求
謝謝
作者: AlanSung   2013-02-09 18:24:00
try gevent
作者: darkgerm (黑駿)   2013-02-09 18:28:00
網路連線怎麼可能不扯到封包傳送....你的速度瓶頸會不會卡在網路速度?
作者: carlcarl (carl)   2013-02-10 00:25:00
gevent++ 感覺是卡在io
作者: oarpvfpre (永遠不夠花的薪水..)   2013-02-10 00:39:00
改用 gevent 之後,可以達到滿足我的需求了我一次把10個網站加到 list 裡面去抓資料抓完之後再呼叫接下來10個...不知道 gevent + threading 會不會更快?
作者: timTan (用口頭禪區分年記)   2013-02-10 08:41:00
Try scrapy
作者: carlcarl (carl)   2013-02-14 21:07:00
gevent+threading感覺不會比較快...

Links booklink

Contact Us: admin [ a t ] ucptt.com