Я загружаю изображения с помощью aiohttp, и мне было интересно, есть ли способ ограничить количество открытых запросов, которые еще не завершены. Это код, который у меня сейчас есть:
async def get_images(url, session):
chunk_size = 100
# Print statement to show when a request is being made.
print(f'Making request to {url}')
async with session.get(url=url) as r:
with open('path/name.png', 'wb') as file:
while True:
chunk = await r.content.read(chunk_size)
if not chunk:
break
file.write(chunk)
# List of urls to get images from
urls = [...]
conn = aiohttp.TCPConnector(limit=3)
loop = asyncio.get_event_loop()
session = aiohttp.ClientSession(connector=conn, loop=loop)
loop.run_until_complete(asyncio.gather(*(get_images(url, session=session) for url in urls)))
Проблема в том, что я добавил оператор печати, чтобы показать мне, когда выполняется каждый запрос, и он делает почти 21 запрос одновременно, вместо 3, которыми я хочу ограничить его (т. Е. Один раз изображение загрузка завершена, можно перейти к следующему URL в списке, чтобы получить). Мне просто интересно, что я здесь делаю не так.