Mikhail
Для второго питона
Nikolay Markov
Это в сам питон
До этого был gevent и прочая магия
Tishka17
Это в сам питон
Простите, но asyncio - встроенный модуль. Подходов к асинхронному программированию чуть больше
Nikolay Markov
Для второго питона
Он же экспериментальный
Vladyslav 🇺🇦🇪🇺
Угадаешь type(y) и type(y())?
Первое обьект, второе функция?
Nikolay Markov
Во втором питоне были проблемы в самом ядре, которые не позволяли так просто впилить асинк
Tishka17
Первое обьект, второе функция?
Как тип y() может быть функция, если y без изменений возвращает x()?
Mikhail
trollius называется чтоли
Да так называется
Nikolay Markov
Строго говоря, его не получится бэкпортировать
Nikolay Markov
Только попытаться
Nikolay Markov
Это прототип, который не является бэкпортом
Tishka17
Первое обьект, второе функция?
Так вот. Нет. Типы те же самые что дЛя x
Tishka17
И тут вопрос: а зачем мы вообще пишем async перед определением функции? ;-)
Tishka17
Она ретернется без авейта
x() тоже ретурнится без эвейта
Nikolay Markov
Ну да, стал :) что не отменяет того, что во втором питоне асинхронности в виде asyncio быть в принципе не может без хитрожопого патчинга стандартной библиотеки
Vladyslav 🇺🇦🇪🇺
И тут вопрос: а зачем мы вообще пишем async перед определением функции? ;-)
Для обьявление корутины Где то же оно играет роль
Nikolay Markov
Что и делает gevent
Tishka17
На самом деле просто запрещено делать await внутри синхронной функции. Всё
Tishka17
Просто для строгости и различия подходов к разработке
Nikolay Markov
Потому что await подразумевает генерацию колбэка на событие в ивентлупе
Tishka17
Так вот синхронная функция и асинхронная ничем не отличаются
Nikolay Markov
А не потому что так захотели
Tishka17
Кроме того, что внутри синхронной эвейт возможен только неявно
Vladyslav 🇺🇦🇪🇺
Так вот синхронная функция и асинхронная ничем не отличаются
👮‍♂за тобой придет питонячая полиция за эту фразу
Nikolay Markov
Кроме того, что внутри синхронной эвейт возможен только неявно
Возможен через run_until_complete(), если больше асинхронных вызовов на этом лупе нет
Tishka17
Грубо, пока ты выполняет синхррлнную функцию - переключения не будет. При асинхронной - может. Но это не значит что результат выполнения обеих фукнций не может быть awaitable-объектом (корутиной)
Vladyslav 🇺🇦🇪🇺
Не, он всё правильно пишет
Окей, что мешаеь юзать асинк евейьы в джанге?
Nikolay Markov
Окей, что мешаеь юзать асинк евейьы в джанге?
Ничего, за исключением того, что там это бессмысленно
Nikolay Markov
Потому что работа с сетью там синхронная
Vladyslav 🇺🇦🇪🇺
По вашей логике можно без проблем исполнить асинхронщину в джанге
Tishka17
Нет
Tishka17
Ты не читаешь, да?
Vladyslav 🇺🇦🇪🇺
Ты не читаешь, да?
Нет, я наркоман
Tishka17
Синхронная функция выполняется синхронно. Одна в одном потоке. Но это не значит что её результат тоже будет синхронно получен
Tishka17
Асинхронная функция выполняется асинхронно.
Vladyslav 🇺🇦🇪🇺
?
Vladyslav 🇺🇦🇪🇺
Так вот синхронная функция и асинхронная ничем не отличаются
Tishka17
Погоди, ты уже немного не в ту степь
Да я про то, что синхронная функция без проблем вернёт корутину
Nikolay Markov
Результат, разумеется, будет получен синхронно
Nikolay Markov
Но он может быть корутиной, да
Tishka17
Ну а асинхронная всегда возвращает корутину, окей
Nikolay Markov
?
Корутина - это тоже функция, только с несколькими точками входа и выхода
Vladyslav 🇺🇦🇪🇺
Хорошо. Я упрощал
Нинада так :)
Nikolay Markov
Tishka17
Ну так вот. Сам по себе вызов синхронной функции не может сделать асинхронную менее асинхронной
Tishka17
А вот что там ещё дополнительно делается - это вопрос всегда
Vladyslav 🇺🇦🇪🇺
Ну так вот. Сам по себе вызов синхронной функции не может сделать асинхронную менее асинхронной
Значит 2 варианта, либо мой бенч говно либо есть какой то нюанс при вызове синхрона из корутины
Nikolay Markov
Значит вывод? Разница есть
С точки зрения логики - разница только в синтаксисе
Vladyslav 🇺🇦🇪🇺
Tishka17
Пожалуй и я спать
Nikolay Markov
Я про ее вызов через луп
Nikolay Markov
ensure_future
Tishka17
Я про ее вызов через луп
А я про простые вызовы
Vladyslav 🇺🇦🇪🇺
Ну, если у тебя там классы на что-то влияют - то да, говно
Инит точно есть Может еще что. Не помню
Tishka17
Лол
Tishka17
К слову
Nikolay Markov
А я про простые вызовы
А простые это лишь создание экземпляра генератора
Tishka17
import asyncio class Meta(type): async def __call__(cls): x=cls.__new__(cls) await x.__ainit__() return x class X(metaclass=Meta): async def __ainit__(self): print(1) async def main(): x = await X() asyncio.run(main())
Tishka17
Инит точно есть Может еще что. Не помню
Вон тебе асинхронные классы :)
Tishka17
Это конечно трюк, но тем не менее
Tishka17
Вот про генераторы верно, да. Забыл совсем