Привет! Показываю на пальцах, в чём крутость асинхронного кода на Python и показываю, как с помощью него эффективно взаимодействовать с БД. Поддержать: / luchanos / @luchanos #ityoutubers #ityoutubersru
Спасибо, на этапе изучения асинхронности, которая сама по себе является очень сложно для понимания темой, вот такие прикладные ролики с примерами использования просто бесценны
Когда нужен был create table, а pyspark умеет только dml , нашел это изделие И получается, отправляю в базу один ddl запрос через асинхронную функцию, предназначенную для параллельной работы тьмы запросов Профит
Можно и блокирующий код запускать, для этого используется конструкция loop.run_in_executor(). Но вот написать не блокирующий код не используя await asyncio.sleep() и уже готовые библиотеки которые это поддерживают, это уже интересно.
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, которое мы будем покрывать всеми такими вот прелестями)
А если не использовать асинхронную библиотеку для постгри и пытаться стандартной библиотекой psycopg2 выполнять запросы в функциях-корутинах завернутых в async + await asyncio.sleep(0.1). Не будет также по скорости? Вопрос в целом, почему нельзя использовать синхронную библиотеку для записи БД или чего-то ещё, если мы всё равно можем передать для async def xxx(). awaitable объект.
Здравствуйте. ищу решение. У меня такая проблема. Основной код асинхронный, и при определённом выполнении условия должен создаваться новый тред/поток, который должен жить уже дальше своей жизнью. Но к сожалению выходит так, что создаётся новый потом внутри асинхронке и он стопорит всё, пока не закончит свою работу. Уже месяца 2 ищу как мне создать новый поток, который бы зарождался в асинхронке и жил своей жизнью. Может у кого есть идеи? ПС. Пожалуйста не пишите, мол зачем тебе, сделай асинхронно вообще всё. Это не решение моей задачи. Мне нужный асинхронный парсинг в процессе работы которого, выполняется условие и стартует грубо говоря отдельная программа. И мне нужно, что бы это был именно новый поток. Ни и что бы совсем усложнить задачу, количество будущих потоков неизвестно (динамическое). Кто знает решение такой задачи. Отзовитесь ))
Бесполезное видео. Вы не даете конкретики во времени выполнения. Много всяких излишеств. Раз уж вы показываете gather, то следовало бы использовать comprehension, заполняемый корутинами.
ахиреть как быстро стало работать. столкнулся с проблемой асинхронности с ТГ ботом на aiogram не хочет работать просто так с sqlite а мне она идеально подходит +-. Ну и шаг назад два вперёд , сейчас буду повторять код.
круто нихера не понял где можно нормльно разобрать асинх у меня надо гет пост в панду сложить прилетит джсон после псот проверил методом раскидать по ядрам ну бустрее но ядра занимать не хочется # df['jsonreport'] = df.newbody.parallel_apply(self.apply_func) типо того на 4 быстрее чем просто апплай да ) но вот про асинхр пытаюсь понять как действовать ничига не понимаю(