Загрузка видео в асинхронном стиле



Aiofiles не умеет творить чудеса; она всего лишь работает асинхронно с вашими файлами. Если вы захотите скачать один большой видеофайл из интернета, вы не добьётесь большей скорости, чем при обычном скачивании. Для демонстрации будет использован файл, который весит 212 МБ.

Код ниже скачает видеофайл размером 212 МБ дважды: сначала в синхронном стиле, а затем в асинхронном. После завершения скачивания он напечатает время, затраченное на скачивание. Скорость скачивания будет зависеть от скорости интернет-соединения.

import requests
import time
import aiofiles
import asyncio
import aiohttp

url = 'https://mob25.com/nu_pogodi.mp4'

def sync_write():
    with open('video/sync_video_async.mp4', 'wb') as video:
        response = requests.get(url, stream=True)
        for piece in response.iter_content(chunk_size=5120):
            video.write(piece)

async def async_write():
    async with aiohttp.ClientSession() as session:
        async with aiofiles.open('video/async_video_async.mp4', mode='wb') as video:
            async with session.get(url) as response:
                async for piece in response.content.iter_chunked(5120):
                    await video.write(piece)

start = time.perf_counter()
sync_write()
print(f'Cохранено синхронным способом за {round(time.perf_counter() - start, 3)} сек')
start = time.perf_counter()
asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
asyncio.run(async_write())
print(f'Cохранено асинхронным способом за {round(time.perf_counter() - start, 3)} сек')

#Результат
    Cохранено синхронным способом за 60.593 сек
    Cохранено асинхронным способом за 58.765 сек


Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: