1 回答

TA貢獻1883條經驗 獲得超3個贊
我相信這是由于列表中的非錯誤網址造成的,這些網址指向可能需要很長時間才能加載為響應對象的圖像和視頻,并最終消耗大量時間才能完成任務。
很難提前判斷這是否屬實,但您當然可以通過添加用于time.time()測量每個請求所用時間并打印其狀態的代碼來測試它。
請注意,除非您await response.read()或同等人員,否則客戶端不會“加載”響應正文,只有標頭“加載”。盡管如此,一些無故障的 URL 很可能需要很長時間才能返回標頭。也有可能一些有問題的需要很長時間才能返回錯誤狀態,也許是那些你沒有手動檢查的。asyncio.gather()所花費的時間與列表中最長的 URL 一樣長,因此,如果您有數千個 URL,則至少其中一些肯定會滯后。
fetch但假設你的前提是正確的,你可以通過包裝來實現限制wait_for:
async def fetch_with_limit(session, url):
try:
return await asyncio.wait_for(fetch(session, url), 1)
except asyncio.TimeoutError:
return True # took more than 1s, probably non-faulty
現在您可以使用fetch_with_limit來代替fetch.
添加回答
舉報