Я пытаюсь загрузить несколько файлов с разных URL-адресов, используя асинхронную загрузку в asyncio и aiohttp, я ограничиваю количество соединений, созданных с помощью семафора, и я назначаю значение 4, когда я выполняю вызов, начальный он выглядит какСоздается 4 соединения и происходит параллельная выборка, однако, как только значение семафора достигает 0, с тех пор загрузка происходит 1 на 1, и я не вижу увеличения семафора, насколько я понимаю, значение семафора должно увеличиться после критической секциивыполнен.вот код
async def yut(self,urls):
import aiohttp
loop = asyncio.get_event_loop()
semaphore = asyncio.BoundedSemaphore(4)
async with aiohttp.ClientSession(loop=loop) as session:
await asyncio.wait([
self.get_image(url,session,semaphore) for url in urls
])
async def get_image(self,url, session, semaphore, chunk_size=1<<15):
from contextlib import closing
with (await semaphore): # limit number of concurrent downloads
print(semaphore._value)
filename = self.get_filename(url)
response = await session.get(url)
with closing(response), open(filename, 'wb') as file:
while True:
chunk = await response.content.read(chunk_size)
if not chunk:
break
file.write(chunk)
return filename
Вывод значений семафора выглядит следующим образом: 3 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Как выпустить семафор справавремя, чтобы параллельная выборка могла быть восстановлена?