sync v.s. async - Скачиваем фотографии котов из интернета. Используем asyncio, aiohttp, aiofiles.

  Рет қаралды 1,696

Кибер Весло

Кибер Весло

2 жыл бұрын

Исходный код из видео: github.com/dvk-net/async-vs-s...
Поддержать канал: / cyber_paddle
В данном видео я покажу как написать реальный асинхронный код (а не всякие там sleep(0.5)...
На первом этипе будем скачивать котов синхронно, 100 шт. , а затем перепишем код в асинхронный вариант.
Для этого нам понадобится:
- asyncio
- aiohttp
- aiofiles

Пікірлер: 23
@nislacker
@nislacker Жыл бұрын
Классно объясняете! Кстати вместо res.headers.get('Content-Type').split('/')[1] можно использовать res.getheader('Content-Type').split('/')[1] Ещё ответы сервера могут повторяться, т.к. возвращаются просто рандомные картинки, поэтому можно проверять хэш каждой новой картинки в множестве и если его там ещё нет, то добавить в само множество и скачать, иначе проигнорить. Но для этого нужно будет сделать цикл while.
@skariotgnet12
@skariotgnet12 Жыл бұрын
Спасибо! Как и всегда - информативно и полезно!
@OPPACHblu_channel
@OPPACHblu_channel Жыл бұрын
Круто! Спасибо за видео, асинхронные коты просто лучшие
@homovespertilio
@homovespertilio 9 ай бұрын
Много непонятно Если мы возьмем отдельно asyncio, проверим, отдельно asyncfiles итп, и сравним с мультитредингом? будет ли у нас прирост х4 или будет х3.99?
@homovespertilio
@homovespertilio 9 ай бұрын
Еще не понятно, в случае asyncio у нас реально сколько файлов загружается в один момент? все 100?
@codecode5962
@codecode5962 Жыл бұрын
Спасибо! Если парсить асинхронно, то часто натыкаешься на блокировки со стороны сервиса(оно и понятно). Можете посоветовать best practices того, как нужно "замедлять" скрипт ? Это как то эмпирически определяется? ))
@cyber-paddle
@cyber-paddle Жыл бұрын
Привет! Ну например можно не 100 задач запускать, а 10(по 10)... Есть такая штука как очередь (pipe), задачки ставятся в очередь и на них подписываются воркеры (исполнители). Можно количеством воркеров ограеичить... Ну и старый добрый синхронный sleep никто не отменял....
@user-tf9ku1xx7x
@user-tf9ku1xx7x Жыл бұрын
Что может быть лучше асинхронных котиков ?
@cyber-paddle
@cyber-paddle Жыл бұрын
Ни-че-го!!!
@dodokwak
@dodokwak 2 жыл бұрын
В реальном проекте у меня на фронте картинка обрезается js функцией в браузере, потом попадает во view джанго приложения, происходит валидация и отправка в амазон корзинку. Пока не пробовала сравнить скорость работы, если функц-л обрезания картинки реализовать асинхронно во view джанго приложения. не могли бы в посоветовать, стоит ли отдавать предпочтение этому подходу? Особенно, если в проекте предусмотрена возможность загрузки нескольких картинок от клиента. Спасибо заранее.
@cyber-paddle
@cyber-paddle 2 жыл бұрын
Обрезание картинки звучит как "cpu-intensive" task... Для такого асинхронный способ не подходит... Если только этот функционал не реализован где-то в сети.... Если массово резать картинки надо или по процессам разбрасывать задачи или по воркерам (как в селери)
@dodokwak
@dodokwak 2 жыл бұрын
Thanks a lot
@satipoff-itsolution578
@satipoff-itsolution578 2 жыл бұрын
Ого
@glamb_is_learning
@glamb_is_learning 9 ай бұрын
была бы разница? если вместо создание задач и использования gather, написать цикл который просто делает await download_a_cat(...)
@glamb_is_learning
@glamb_is_learning 9 ай бұрын
сам отвечаю если использовать await download_a_cat(session, cat), то не будет параллельности скачивании картинок await - это дождаться и соответственно, при каждой итерации будет интерпритатор будет дожидаться скачивания картинки
@cyber-paddle
@cyber-paddle 9 ай бұрын
gather закинет все таски в эвеетлуп и они начнуть выполняться "одновременно". For будет выполнять из последовательно и даже если там await (отпустить контроль и дать возмодность поработать кому-то еще), этого кого-то еще еще нет. Он появится на следующей итерации цикла...
@cyber-paddle
@cyber-paddle 9 ай бұрын
Ну и лайк, подписка, репост...
@glamb_is_learning
@glamb_is_learning 9 ай бұрын
@@cyber-paddleспасибо, готово.
@citieslg
@citieslg Жыл бұрын
А если использовать не асинхронные контекстные менеджеры? и обычный request? Это ленивый вопрос. Я если сам попробую, то напишу)
@cyber-paddle
@cyber-paddle Жыл бұрын
Можно, просто блокернет исполнения и магия асинхронщины пропадет
@citieslg
@citieslg Жыл бұрын
@@cyber-paddle понял. а как обходит блокировку асинхронка?
@citieslg
@citieslg Жыл бұрын
@@cyber-paddle спасибо
@Katar1x
@Katar1x Жыл бұрын
​@@citieslg await передает управлений в loop, а не дожидается выполнения
Requests vs HTTPX vs Aiohttp | Which One to Pick?
15:11
ArjanCodes
Рет қаралды 35 М.
Finger Heart - Fancy Refill (Inside Out Animation)
00:30
FASH
Рет қаралды 25 МЛН
Андрей Светлов, Python Core Developer «Aiohttp от автора»
41:25
Видео с мероприятий {speach!
Рет қаралды 17 М.
Intro to async Python | Writing a Web Crawler
14:23
mCoding
Рет қаралды 76 М.
Чего ожидать от HTTP/3 + Go
51:07
Нина Пакшина
Рет қаралды 7 М.
Async & Await in Python Simple & FAST HTTP Requests
9:37
John Watson Rooney
Рет қаралды 8 М.
super/MRO, Python's most misunderstood feature.
21:07
mCoding
Рет қаралды 214 М.
Копия iPhone с WildBerries
1:00
Wylsacom
Рет қаралды 8 МЛН