作者oarpvfpre (永遠不夠花的薪水..)
看板Python
標題[問題] 使用多執行緒抓網頁內容
時間Mon Dec 9 16:22:13 2013
最近在用 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 等方式實作,才能滿足我的需求
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 211.20.117.109
推 AlanSung:try gevent 12/09 18:24
推 darkgerm:網路連線怎麼可能不扯到封包傳送.... 12/09 18:28
→ darkgerm:你的速度瓶頸會不會卡在網路速度? 12/09 18:30
推 carlcarl:gevent++ 感覺是卡在io 12/10 00:25
→ oarpvfpre:改用 gevent 之後,可以達到滿足我的需求了 12/10 00:39
→ oarpvfpre:我一次把10個網站加到 list 裡面去抓資料 12/10 00:40
→ oarpvfpre:抓完之後再呼叫接下來10個... 12/10 00:40
→ oarpvfpre:不知道 gevent + threading 會不會更快? 12/10 00:40
推 timTan:Try scrapy 12/10 08:41
→ carlcarl:gevent+threading感覺不會比較快... 12/14 21:07