@ru_python

Страница 9632 из 9768
Какого Бля
17.07.2019
22:17:30
Крче Может я не знаю что значит блокирующий код, но по своему опыту - вызов классов внутри корутин блокирует асинхронное исполнение. Бенчмаркал так - берешь список серверов и через контекстный процессор и клиентскую сессию aiohttp и шедулер идешь и вытаскиваешь статус коды Если правильно вме сделать, коды возвращаются рандомно. Не по списку. И возвращаются ахуеть с какой скоростью. Короче отет не ожидается Если в коде воткнуть обращение в классы, по прежнему ответ не ждем но ответы уже приходят по порядрчку

Mikhail -Ofast
17.07.2019
22:17:32
Не чувствуешь тут противоречие?
Нет, я не вылизываю запросы, я вылизываю пять запросов

Google
Mikhail -Ofast
17.07.2019
22:18:05
Или вы про то, что ОРМ внутри себя асинхронно работает?

Tishka17
17.07.2019
22:18:07
Собственно да
Ну так вызывай параллельно :)

Или вы про то, что ОРМ внутри себя асинхронно работает?
Мы про использование ОРМ в коде на asyncio

Mikhail -Ofast
17.07.2019
22:19:43
Мы про использование ОРМ в коде на asyncio
Все еще не чувствую противоречий с тем чтобы использовать его чтобы параллельно дергать БД(

Tishka17
17.07.2019
22:20:12
Все еще не чувствую противоречий с тем чтобы использовать его чтобы параллельно дергать БД(
Для того чтобы параллельно дергать БД не нужен асинкио. Просто дергай параллельно

И не надо париться вообще

Не знаю, ThreadPoolExecutor, Pool.map всякие есть

Mikhail -Ofast
17.07.2019
22:21:02
Для того чтобы параллельно дергать БД не нужен асинкио. Просто дергай параллельно
Ну чтобы «просто дергать параллельно» надо всё равно завести ТредПул какой нибудь

Tishka17
17.07.2019
22:21:16
И более аккуратно с ним работать?

Google
Tishka17
17.07.2019
22:21:46
Mikhail -Ofast
17.07.2019
22:21:51
Но сейчас там просто тред пул воткнут

Tishka17
17.07.2019
22:22:17
Что то, что это
Только асинкио код требует большего внимания. См выше про гарантии отсутствия блокировок

Какого Бля
17.07.2019
22:26:40
декоратор это такая же функция
Вот именно Декоратор это функция А корутина это корутина

Какого Бля
17.07.2019
22:27:06
Нет
Нет?

fn main() {}
17.07.2019
22:27:20
Декоратор может быть корутиной

Какого Бля
17.07.2019
22:27:23
Вызов функции из корутины = блок

fn main() {}
17.07.2019
22:27:53
Не проверял
Ну проверь?

Какого Бля
17.07.2019
22:27:59
Tishka17
17.07.2019
22:29:42
Вот именно Декоратор это функция А корутина это корутина
Декоратор вызывается в момент его применения. То есть при создании функции

Какого Бля
17.07.2019
22:30:31
Tishka17
17.07.2019
22:30:35
Ты обычно не вызваешь декоратор из своей корутины. Ты вызваешь декорированную функцию

Корутина - функция, которая возвращает объект, который можно эвейтить ;-)

Какого Бля
17.07.2019
22:31:28
Ты обычно не вызваешь декоратор из своей корутины. Ты вызваешь декорированную функцию
Деворированная функция это та же функция Вызов ее из корутины = блок

Tishka17
17.07.2019
22:31:55
Декорированная функция вполне может быть корутиной

Какого Бля
17.07.2019
22:32:01
?‍♂

Google
Tishka17
17.07.2019
22:32:34
Собственно async def x(): pass def y(): return x() Ничем особо не отличаются

Какого Бля
17.07.2019
22:33:14
Кроме того что первое это корутина а второе нет:)

Nikolay
17.07.2019
22:34:08
Корутина - это всего лишь функция с несколькими точками входа и выхода

Tishka17
17.07.2019
22:34:13
Кроме того что первое это корутина а второе нет:)
Ага. Вот только делают они абсолютно одно и то же

Какого Бля
17.07.2019
22:34:15
Собственно async def x(): pass def y(): return x() Ничем особо не отличаются
Кстати, разве это валидно? Вызывать из функции корутину?

Какого Бля
17.07.2019
22:34:55
Ага. Вот только делают они абсолютно одно и то же
Так никто не спорит что это одно и тоже Механизм исполнения разный

И для правильной работы корутин т.е. без блоков, миксовпть код с синхронным нельзя

Nikolay
17.07.2019
22:36:09
И для правильной работы корутин т.е. без блоков, миксовпть код с синхронным нельзя
У тебя так или иначе под асинхронными корутинами будет тонна синхронных вызовов

Какого Бля
17.07.2019
22:36:10
За авейтить нужно как минимум

Nikolay
17.07.2019
22:36:19
Ты этого никак не избежишь

Tishka17
17.07.2019
22:36:22
import asyncio async def x(): await asyncio.sleep(1) print("x") def y(): return x() async def main(): await x() await y() loop = asyncio.get_event_loop() loop.run_until_complete(main()) loop.close()

Tishka17
17.07.2019
22:37:03
Валидно, только она не выполнится
Ну она выглядит как обычная функция, а работает как асинхронная. ))

Nikolay
17.07.2019
22:37:04
Он же не awaitable

fn main() {}
17.07.2019
22:37:05
Упадёт на await y(), не?
Нет, не должен

Tishka17
17.07.2019
22:37:09
Google
Tishka17
17.07.2019
22:37:17
Специально проверил

Какого Бля
17.07.2019
22:37:33
У тебя так или иначе под асинхронными корутинами будет тонна синхронных вызовов
В том смымле от асинхрона смысла нет В этом и фишка чтоб придерживаться асинхронной истории чтоб получить с этого профит

Tishka17
17.07.2019
22:37:35
x() возвращает объект, на который можно делать await

Mikhail -Ofast
17.07.2019
22:37:42
Упадёт на await y(), не?
Он выполнится и вернет корутину же

Tishka17
17.07.2019
22:37:50
y() ничего не делает, просто передаёт его выше

Mikhail -Ofast
17.07.2019
22:38:18
Во втором питоне асинкио выглядит менее запутано)

Tishka17
17.07.2019
22:38:18
Собственно type(x) - function

fn main() {}
17.07.2019
22:38:34
Mikhail -Ofast
17.07.2019
22:38:39
Собственно type(x) - function
Не генератор разве?

Nikolay
17.07.2019
22:38:48
Tishka17
17.07.2019
22:38:49
А вот type(x()) - coroutine

Какого Бля
17.07.2019
22:39:38
С одной стороны да, с другой стороны ты этого по определению сделать не сможешь
Я могу добиться видимости асинхронного исполнения о котором я писал выше, где писал про бенчмарк

Mikhail -Ofast
17.07.2019
22:40:01
Какого Бля
17.07.2019
22:40:04
А вот type(x()) - coroutine
Ну дык Все верно

Tishka17
17.07.2019
22:40:14
Эм?
Asyncio завезли где-то в 3.4

Nikolay
17.07.2019
22:40:15
Эм?
Во втором питоне нет asyncio

Mikhail -Ofast
17.07.2019
22:40:29
Google
Tishka17
17.07.2019
22:40:33
Ну дык Все верно
Угадаешь type(y) и type(y())?

Nikolay
17.07.2019
22:40:42
Я могу добиться видимости асинхронного исполнения о котором я писал выше, где писал про бенчмарк
Ты можешь что угодно, но у тебя всё равно в коде будут синхронные вызовы

Mikhail -Ofast
17.07.2019
22:40:56
trollius называется чтоли

Для второго питона

Nikolay
17.07.2019
22:41:04
Это в сам питон
До этого был gevent и прочая магия

fn main() {}
17.07.2019
22:41:13
Tishka17
17.07.2019
22:41:15
Это в сам питон
Простите, но asyncio - встроенный модуль. Подходов к асинхронному программированию чуть больше

Nikolay
17.07.2019
22:41:23
Для второго питона
Он же экспериментальный

Tishka17
17.07.2019
22:41:28
fn main() {}
17.07.2019
22:41:32
Но его начали делать в 3 питоне и бэкпортировали на второй

Какого Бля
17.07.2019
22:41:33
Угадаешь type(y) и type(y())?
Первое обьект, второе функция?

Nikolay
17.07.2019
22:41:46
Во втором питоне были проблемы в самом ядре, которые не позволяли так просто впилить асинк

Tishka17
17.07.2019
22:42:02
Первое обьект, второе функция?
Как тип y() может быть функция, если y без изменений возвращает x()?

Mikhail -Ofast
17.07.2019
22:42:09
trollius называется чтоли
Да так называется

Nikolay
17.07.2019
22:42:12
Но его начали делать в 3 питоне и бэкпортировали на второй
Строго говоря, его не получится бэкпортировать

fn main() {}
17.07.2019
22:42:21
Nikolay
17.07.2019
22:42:24
Только попытаться

^
Это прототип, который не является бэкпортом

Какого Бля
17.07.2019
22:42:44
Tishka17
17.07.2019
22:42:58
Первое обьект, второе функция?
Так вот. Нет. Типы те же самые что дЛя x

Страница 9632 из 9768