aiohttp определенное timeout
При парсинге у меня возникла проблема, он как бы застывает на месте. Ничего не происходит, никаких логов, абсолютно ничего.
Не изменяется нагрузка 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 (или сам парсер) зависает.
Ответы (1 шт):
Автор решения: Sergey Gornostaev
→ Ссылка
В документации описано как указать таймаут:
timeout = aiohttp.ClientTimeout(total=30)
async with aiohttp.ClientSession(timeout=timeout) as session:
...