Спасибо, на этапе изучения асинхронности, которая сама по себе является очень сложно для понимания темой, вот такие прикладные ролики с примерами использования просто бесценны
Когда нужен был create table, а pyspark умеет только dml , нашел это изделие И получается, отправляю в базу один ddl запрос через асинхронную функцию, предназначенную для параллельной работы тьмы запросов Профит
Можно и блокирующий код запускать, для этого используется конструкция loop.run_in_executor(). Но вот написать не блокирующий код не используя await asyncio.sleep() и уже готовые библиотеки которые это поддерживают, это уже интересно.
А если не использовать асинхронную библиотеку для постгри и пытаться стандартной библиотекой psycopg2 выполнять запросы в функциях-корутинах завернутых в async + await asyncio.sleep(0.1). Не будет также по скорости? Вопрос в целом, почему нельзя использовать синхронную библиотеку для записи БД или чего-то ещё, если мы всё равно можем передать для async def xxx(). awaitable объект.
ахиреть как быстро стало работать. столкнулся с проблемой асинхронности с ТГ ботом на aiogram не хочет работать просто так с sqlite а мне она идеально подходит +-. Ну и шаг назад два вперёд , сейчас буду повторять код.
pended и не нужен, у него цикл х из 10_000, мог бы использовать х, что бы не добавлять лишние действия. Но это не важно, главное знания про асинхронность он донес
странно получается) до 10 инсерта как-то в разнобой ID и cnt, потом нормально create table test (id serial not null, val text) QUERY = """INSERT INTO test (val) VALUES ($1)""" await db_pool.fetch(QUERY, 'test insert ' + str(cnt)) ID. VAL 1 test insert 2 2 test insert 4 3 test insert 1 4 test insert 7 5 test insert 3 6 test insert 6 7 test insert 8 8 test insert 5 9 test insert 9 10 test insert 10
это связано с тем, что вывод в консольку может долетать с разной скоростью от каждой таски) аналогично может получиться, что сначала в консольке будет Exception, а потом все остальное)
обычно такие вещи админы смотрят глазами. существует такой параметр, он называется утилизация. вот надо чтобы он + время ответа базы не превышало допустимые значения) постараюсь раскрыть тему)
Интересно а если неизвестно заранее количество запросов? Получается если поставить длину 1, то он будет ждать пока не наберётся 200 и пользователю ничего не вернётся?
@@alexsur7315 я думаю что это всё будет в рамках проекта, по срокам точно не скажу сейчас. идея в том, что тот материал, который я тут осветил прикрутить на что-то "боевое". я уже купил домен и там есть сервер на котором будет web-app, которое мы будем покрывать всеми такими вот прелестями)
Здравствуйте. ищу решение. У меня такая проблема. Основной код асинхронный, и при определённом выполнении условия должен создаваться новый тред/поток, который должен жить уже дальше своей жизнью. Но к сожалению выходит так, что создаётся новый потом внутри асинхронке и он стопорит всё, пока не закончит свою работу. Уже месяца 2 ищу как мне создать новый поток, который бы зарождался в асинхронке и жил своей жизнью. Может у кого есть идеи? ПС. Пожалуйста не пишите, мол зачем тебе, сделай асинхронно вообще всё. Это не решение моей задачи. Мне нужный асинхронный парсинг в процессе работы которого, выполняется условие и стартует грубо говоря отдельная программа. И мне нужно, что бы это был именно новый поток. Ни и что бы совсем усложнить задачу, количество будущих потоков неизвестно (динамическое). Кто знает решение такой задачи. Отзовитесь ))
Бесполезное видео. Вы не даете конкретики во времени выполнения. Много всяких излишеств. Раз уж вы показываете gather, то следовало бы использовать comprehension, заполняемый корутинами.
круто нихера не понял где можно нормльно разобрать асинх у меня надо гет пост в панду сложить прилетит джсон после псот проверил методом раскидать по ядрам ну бустрее но ядра занимать не хочется # df['jsonreport'] = df.newbody.parallel_apply(self.apply_func) типо того на 4 быстрее чем просто апплай да ) но вот про асинхр пытаюсь понять как действовать ничига не понимаю(
Спасибо, на этапе изучения асинхронности, которая сама по себе является очень сложно для понимания темой, вот такие прикладные ролики с примерами использования просто бесценны
подписан на тебя где-то год, но когда нахожу такие старые видео у тебя - респект к каналу все больше растет)
Огромная благодарность за уроки! 🙏
Полезная тема! Надо глубже.
спасибо! сделаем)
Очень сильно понравилось, спасибо
сколько твоих видосов не смотрю, каждый раз понимаю, что очень доступно объясняешь, респект
Спасибо большое! очень доходчиво! а боялась, что не осилю асинхронность)
Круто! До этого плохо понимал как работает asyncio, но теперь все понятно
Пересмотрел и спустя полгода понял что к чему)))
благодарю за отличную работу !
спасибо что смотрите!
Когда нужен был create table, а pyspark умеет только dml , нашел это изделие
И получается, отправляю в базу один ddl запрос через асинхронную функцию, предназначенную для параллельной работы тьмы запросов
Профит
Парень, спасибо большое ! Очень круто объяснил!
Спасибо!!! Интересно, полезно, и вроде как вполне "взрослый" подход
дякую! змістовний приклад!
Очень доходчиво! Благодарю за труд!
Спасибо за познавательный материал без воды👍
отличный туториал,спасибо автор 👍
Спасибо за труд! Постепенно вхожу в сферу!)
отличный материал - спасибо!
Офигеть год прошел)
Очень круто, было бы прикольно осознать как запускать в фоне процесс без ожидания
процесс как python-процесс? не могли бы вы конкретизировать?
Спасибо, было очень познавательно
благодарю!
Асинхронка крутая тема👍 ждём новых выпусков про неё)
Большое спасибо за видеоурок
Можно и блокирующий код запускать, для этого используется конструкция loop.run_in_executor(). Но вот написать не блокирующий код не используя await asyncio.sleep() и уже готовые библиотеки которые это поддерживают, это уже интересно.
Круто спасибо
И вам)
Спасибо! Очень помогло!
Кайфанул!
Спустя 1,5 года разработки не расторопных сервисов, наконец то добрался до асинхрона. Спасибо!
В конце sleep забыл удалить
Не забыл, а оставил для имитации задержки сети, подключается же к локалхосту.
Лайк! (по рекомендачии от канала джангоскул)
Отлично! Лайк и подписка!
спасибо! постараюсь радовать контентом!
отличное видео. красавец
4:39 наша лупа))
Ага и пупа)
А если не использовать асинхронную библиотеку для постгри и пытаться стандартной библиотекой psycopg2 выполнять запросы в функциях-корутинах завернутых в async + await asyncio.sleep(0.1). Не будет также по скорости? Вопрос в целом, почему нельзя использовать синхронную библиотеку для записи БД или чего-то ещё, если мы всё равно можем передать для async def xxx(). awaitable объект.
Встанет колом
Хорошее видео) Есть только один вопрос - можно ли в chunk передать сразу все 10000 запросов? Как проверить это ограничение и что вообще будет?
Супер видео! Спасибо! Кстати, можно убрать искусственно тормозящий asyncio.sleep в конце и будет еще быстрее)
да! но это спецом было сделано)
такой вопрос: в каком случае лучше использовать асинхронность, а в каком многопоточность, если обе штуки нужны для задач ввода-вывода?
@Ivan Petrov спасибо за развернутый ответ)
Спешиал сенкс за отсылку к PEP 515 - Underscores in Numeric Literals. Забыл шо так можно.
ахиреть как быстро стало работать.
столкнулся с проблемой асинхронности с ТГ ботом на aiogram не хочет работать просто так с sqlite а мне она идеально подходит +-.
Ну и шаг назад два вперёд , сейчас буду повторять код.
Да топчик
спасибо!
Классное видео, только "or pended == 10_000" никогда не исполнится(т.к. 9_999 будет последним в range )
хаха)) действительно)) спасибо!)
@@luchanos А сколько по умолчанию в пуле воркеров ? Можно его менять ... стоило упомянуть
pended и не нужен, у него цикл х из 10_000, мог бы использовать х, что бы не добавлять лишние действия. Но это не важно, главное знания про асинхронность он донес
странно получается) до 10 инсерта как-то в разнобой ID и cnt, потом нормально
create table test (id serial not null, val text)
QUERY = """INSERT INTO test (val) VALUES ($1)"""
await db_pool.fetch(QUERY, 'test insert ' + str(cnt))
ID. VAL
1 test insert 2
2 test insert 4
3 test insert 1
4 test insert 7
5 test insert 3
6 test insert 6
7 test insert 8
8 test insert 5
9 test insert 9
10 test insert 10
это связано с тем, что вывод в консольку может долетать с разной скоростью от каждой таски) аналогично может получиться, что сначала в консольке будет Exception, а потом все остальное)
Спасибо! Понятно
👍🏻
Интересно. Спасибо. НО БОЛЬШАЯ ПРОСЬБА не бить так сильно по клавишам!!! В наушниках очень не приятно слушать.
спасибо! я уже купил оборудование - будет ремастер старых роликов)
Еще бы как-нибудь создать код анализирующий нагрузку на БД и автоматом меняющий чанки на оптимальное значение. По теме - палец вверх
обычно такие вещи админы смотрят глазами. существует такой параметр, он называется утилизация. вот надо чтобы он + время ответа базы не превышало допустимые значения) постараюсь раскрыть тему)
tasks в середину цикла. Почему не показать пример с батч генератором.
хороший кейс, спасибо! покажу в переработанном материале)
Интересно а если неизвестно заранее количество запросов? Получается если поставить длину 1, то он будет ждать пока не наберётся 200 и пользователю ничего не вернётся?
абсолютно верно!) тут надо понимать какие риски мы несём и как с этим бороться. в ремейке этого ролика я покажу расширенный вариант)
@@luchanos спасибо. А когда ролик на этот счёт будет выпущен?
@@alexsur7315 я думаю что это всё будет в рамках проекта, по срокам точно не скажу сейчас. идея в том, что тот материал, который я тут осветил прикрутить на что-то "боевое". я уже купил домен и там есть сервер на котором будет web-app, которое мы будем покрывать всеми такими вот прелестями)
спасиюо за видео. сделай пожалуйста большой ,углубленный туториал реальным проектом по этой теме.
уже в разработке!) ждите анонс!)
Здравствуйте.
ищу решение.
У меня такая проблема. Основной код асинхронный, и при определённом выполнении условия должен создаваться новый тред/поток, который должен жить уже дальше своей жизнью. Но к сожалению выходит так, что создаётся новый потом внутри асинхронке и он стопорит всё, пока не закончит свою работу.
Уже месяца 2 ищу как мне создать новый поток, который бы зарождался в асинхронке и жил своей жизнью. Может у кого есть идеи?
ПС. Пожалуйста не пишите, мол зачем тебе, сделай асинхронно вообще всё. Это не решение моей задачи. Мне нужный асинхронный парсинг в процессе работы которого, выполняется условие и стартует грубо говоря отдельная программа. И мне нужно, что бы это был именно новый поток.
Ни и что бы совсем усложнить задачу, количество будущих потоков неизвестно (динамическое).
Кто знает решение такой задачи. Отзовитесь ))
Уже неактуально (
Я экспериментировал с asyncio и библиотекой Jira. Не хотят они дружить(( У Вас нет не чего в этой теме?
Никогда не слышал про библиотеку Jira, надо будет поугглить
Интересно, а зачем create_pool асинхронный?
Потому что подключение к базе тоже занимает время и может происходить с задержками
забыл убрать await sleep(.1)
Он же сказал, что спецом не будет убирать
+++
Бесполезное видео. Вы не даете конкретики во времени выполнения. Много всяких излишеств. Раз уж вы показываете gather, то следовало бы использовать comprehension, заполняемый корутинами.
Сделайте видео лучше, я приду и оценю с удовольствием))
круто нихера не понял где можно нормльно разобрать асинх у меня надо гет пост в панду сложить прилетит джсон после псот проверил методом раскидать по ядрам ну бустрее но ядра занимать не хочется
# df['jsonreport'] = df.newbody.parallel_apply(self.apply_func)
типо того на 4 быстрее чем просто апплай да ) но вот про асинхр пытаюсь понять как действовать ничига не понимаю(