解析时,我遇到了一个问题,它有点冻结。什么都没有发生,没有日志,绝对没有。
CPU 负载和内存消耗不会改变。
现在它在处理了 8000 个链接后冻结了。
我不知道有什么问题。
我认为服务器断开了连接,并且好像请求挂断了。
是否可以以某种方式指定执行请求的时间,例如 30 秒,这样如果这个时间过去了,它会抛出某种错误,以便我可以捕获它并再次执行请求?
我目前正在使用此代码
async def async_request(items):
url = items[0]
global request_semaphone
async with request_semaphone:
try:
async with aiohttp.ClientSession() as client:
async with client.get(url) as r:
print("Статус:", r.status , "url:", url)
if(r.status == 200):
name = url.split("/")[-1]
if(name.find(".jpg") != -1):
await save_image(r, name)
else:
if(len(items) > 1):
return [await r.text(), url, items[1]]
else:
return [await r.text(), url]
else:
print(r.status, "Задержка 1 секунда")
await asyncio.sleep(1)
await async_request(url)
except Exception as e:
print("Блокировка. Ожидание 10 секунд", e, items)
await asyncio.sleep(1)
await async_request(url)
我还将听取为什么 python(或解析器本身)冻结的建议。
该文档描述了如何指定超时: