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:
    ...
→ Ссылка