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