У меня есть такой код:
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?
- Какое количество запросов можно подавать на сервер в один момент?