Re: [心得] 爬蟲實做分享

看板Python作者 (貓橘毛發呆雕像)時間8年前 (2017/03/27 00:29), 8年前編輯推噓1(104)
留言5則, 3人參與, 最新討論串2/3 (看更多)
是個練習 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
你跑個 for 迴圈裡面用 async 根本沒意義啊...
03/27 12:42, 2F

03/27 12:43, , 3F
啊沒事我看錯惹, 實際做事在 asyncio.wait
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
其實這個例子比較好用 threading 就好,之前 pyCon 有講
03/27 21:07, 4F

03/27 21:07, , 5F
說 requests 在做檔案 IO 時好像放掉 GIL?
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
文章代碼(AID): #1Or-o2eF (Python)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 3 篇):
文章代碼(AID): #1Or-o2eF (Python)