Как ограничить число запросов к серверу или прикрутить очередь к таскам?
Хочу скачать видео, которое отдается кусками файлами .ts. При обычном синхронном скачивании все скачивается норм, но каждый кусок скачивается секунды 3, что при большом количество кусков слишком долго.
Решил перевести на асинхронный код, вроде как на маленьких видео, где кусков меньше 300, скачивается плюс-минус быстро и хорошо, хотя в самом начале немного думает. А если файл большой, то ничего не происходит, скрипт работает, сеть грузится на 100% и потом вылетает с ошибкой server disconnect. Подозреваю, что это из-за того, что сразу отправляю все запросы на скачивание.
async def chunk_download(line):
try:
#conn = async with aiohttp.TCPConnector(limit=5)
async with aiohttp.ClientSession() as session:
url = f"{video_link}{line}"
async with session.get(url) as response:
video = await response.read()
print(f"{line}запрос")
async with aiofiles.open(f"{line}","wb") as file:
await file.write(video)
print(f'{line}RR')
except asyncio.QueueEmpty:
print('Queue is empty')
async def video_file_name(spisok):
tasks = []
for i in spisok:
tasks.append(asyncio.create_task(chunk_download(i)))
print(i)
for task in asyncio.as_completed(tasks):
data = await task
print(data)
# async def main():
# tasks = []
video_list() #Получаю список сколько всего кусков в видео
spisok = video_name() #Название всех кусков в список
print(spisok)
asyncio.run(video_file_name(spisok))
Пытался прикрутить к этому делу очередь, но не совсем разобрался как.