@Maxwell012

Как использовать limit_per_host в aiohttp?

У меня есть такой код:
async def main():
    with open('urls.txt', 'r') as urls:
        tasks = []
        connector = aiohttp.TCPConnector(limit_per_host=10)
        for url in urls:
            tasks.append(asyncio.create_task(get_website_code(url.strip(), connector)))

    pages = await asyncio.gather(*tasks)

async def get_website_code(url, connector):
    async with aiohttp.ClientSession(connector=connector) as session:
        response = await session.get(url)
        if response.status in [301, 302, 403, 404, 500, 504]:
            print(f'-----------------------{response.status}----------------------- {url}')
            await session.close()
            return None
        
        await session.close()
        return [await response.text(), url]


У меня есть файл с ссылками на один домен но на разные страницы (около 450 ссылок), из-за этого я бы хотел чтобы было ограничения на количество открытых соединений на один домен (допустим 10). Я нашел что в метод TCPConnector() можно отправить аргумент limit_per_host, если у сайтов одинаковые host, post и is_ssl тогда будет действовать ограничение, код возвращает первый ответ от первого сайта и выдает ошибку aiohttp.client_exceptions.ClientConnectionError: Connector is closed, погуглив нашел что надо закрывать каждое соединение (зачем это если я использую оператор with, но в ответе на вопрос на форуме было написано так, попробовал написать await session.close(), не помогло). Также читал документацию, но не нашел ответа.

Вывод:
- Как правильно использовать limit_per_host?
- Какое количество запросов можно подавать на сервер в один момент?
  • Вопрос задан
  • 167 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы