Re: [心得] 爬蟲實做分享
是個練習 asyncio 的好點子(?),只好借來抄一下改成用 aiohttp & aiofiles.
https://github.com/LFLab/aiofetch/blob/master/aiofetch.py
供參
※ 引述《coeric ( )》之銘言:
: 爬了一本舊漫畫,順便做成exe檔
: 分享給大家,想請各位給一些意見
: 以單純一個什麼都不懂,只會點兩下的使用者來說
: 是否還有哪裡需要改進的?
: http://codepad.org/UZUpas3f
: 附上原始程式碼
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.100.76.218
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1490545794.A.A0F.html
推
03/27 12:39, , 1F
03/27 12:39, 1F
→
03/27 12:42, , 2F
03/27 12:42, 2F
→
03/27 12:43, , 3F
03/27 12:43, 3F
這疑慮是對的, L:48 的 for-loop 的確會導致 L:54 接近循序執行,在 scheduler
沒滿的情況下的確會比較慢。
這部份的考量主要在於 L:54 request 的是主網站而非圖床,避免大量 requests 導致
其他使用者的延遲。
L:64 則是大量 requests 會導致 WinSock 炸掉.... http://imgur.com/zA94lRJ

,只
好加個 limit 再用 wait() 來跑 。 (它炸太快我也不知道上限到底是多少....)
這裡一樣的問題是 async.wait() 會 block 到所有的 task done 才跑下一輪,在某種
意義上 scheduler 也是沒有滿的狀態。
PR welcome.
※ 編輯: zerof (192.19.253.250), 03/27/2017 13:26:18
→
03/27 21:07, , 4F
03/27 21:07, 4F
→
03/27 21:07, , 5F
03/27 21:07, 5F
這蠻有趣的XD, requests 下層的 library 是用 urllib3 是 native python 寫的,
相依性是零,有 connectionpool ,沒猜錯的話是用 threading pool 。
而實際上 GIL 在呼叫用 C 寫的函式的時候都會被釋放,所以在用 open 開檔案的時
候是一定會釋放 GIL 的。
就算是這樣, asyncio 實際上還是比 multithread 快,可以參考這個影片:
https://youtu.be/M8Z65tAl5l4
※ 編輯: zerof (122.100.76.218), 03/27/2017 21:57:58
討論串 (同標題文章)
Python 近期熱門文章
PTT數位生活區 即時熱門文章