FTL
Кто нибудь умеет в LongPoll ВК-шный? Конкретно грамотная обработка сообщений. (Та, я знаю что лучше CallBack, но не хочу париться с подъемом серва)
Vladyslav 🇺🇦🇪🇺
Mikhail
А почему тут не любят асинхронные ОРМ? Или я не правильно понял. Просто у меня 5 долгих запросов к БД асинхронно выполняются где-то в 5 раз быстрее чем синхронно
Tishka17
Tishka17
Попробую объяснить. орм нужна когда ты не планируешь вылизывать каждый запрос и выяснять как сделать его супер быстрым. Главное чтобы работал
Асинк нужен когда у тебя большая нагрузка и ты хочешь из сервера выжать максимум и бережешь даже треды
Tishka17
Не чувствуешь тут противоречие?
Tishka17
Vladyslav 🇺🇦🇪🇺
Крче
Может я не знаю что значит блокирующий код, но по своему опыту - вызов классов внутри корутин блокирует асинхронное исполнение.
Бенчмаркал так - берешь список серверов и через контекстный процессор и клиентскую сессию aiohttp и шедулер идешь и вытаскиваешь статус коды
Если правильно вме сделать, коды возвращаются рандомно. Не по списку. И возвращаются ахуеть с какой скоростью. Короче отет не ожидается
Если в коде воткнуть обращение в классы, по прежнему ответ не ждем но ответы уже приходят по порядрчку
Mikhail
Mikhail
Или вы про то, что ОРМ внутри себя асинхронно работает?
Tishka17
Tishka17
Tishka17
+
Tishka17
Tishka17
И не надо париться вообще
Tishka17
Не знаю, ThreadPoolExecutor, Pool.map всякие есть
Tishka17
Tishka17
И более аккуратно с ним работать?
Tishka17
Mikhail
Mikhail
Но сейчас там просто тред пул воткнут
Tishka17
Что то, что это
Только асинкио код требует большего внимания. См выше про гарантии отсутствия блокировок
Vladyslav 🇺🇦🇪🇺
Вот именно
Декоратор это функция
А корутина это корутина
Vladyslav 🇺🇦🇪🇺
Нет?
Vladyslav 🇺🇦🇪🇺
Вызов функции из корутины = блок
Vladyslav 🇺🇦🇪🇺
Не проверял
Vladyslav 🇺🇦🇪🇺
Завтра
Vladyslav 🇺🇦🇪🇺
Tishka17
Ты обычно не вызваешь декоратор из своей корутины. Ты вызваешь декорированную функцию
Tishka17
Корутина - функция, которая возвращает объект, который можно эвейтить ;-)
Vladyslav 🇺🇦🇪🇺
Tishka17
Декорированная функция вполне может быть корутиной
Vladyslav 🇺🇦🇪🇺
🤷♂
Vladyslav 🇺🇦🇪🇺
Tishka17
Собственно
async def x(): pass
def y(): return x()
Ничем особо не отличаются
Vladyslav 🇺🇦🇪🇺
Кроме того что первое это корутина а второе нет:)
Nikolay Markov
Корутина - это всего лишь функция с несколькими точками входа и выхода
Vladyslav 🇺🇦🇪🇺
Nikolay Markov
Nikolay Markov
Vladyslav 🇺🇦🇪🇺
И для правильной работы корутин т.е. без блоков, миксовпть код с синхронным нельзя
Vladyslav 🇺🇦🇪🇺
Nikolay Markov
Vladyslav 🇺🇦🇪🇺
За авейтить нужно как минимум
Nikolay Markov
Ты этого никак не избежишь
Tishka17
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()
Nikolay Markov
Nikolay Markov
Nikolay Markov
Он же не awaitable
Tishka17
Tishka17
Специально проверил
Tishka17
x() возвращает объект, на который можно делать await
Tishka17
y() ничего не делает, просто передаёт его выше
Nikolay Markov
Mikhail
Во втором питоне асинкио выглядит менее запутано)
Tishka17
Собственно type(x) - function
Mikhail
Nikolay Markov
Tishka17
А вот type(x()) - coroutine
Nikolay Markov
+1
Nikolay Markov
Mikhail
Vladyslav 🇺🇦🇪🇺
Tishka17
Эм?
Asyncio завезли где-то в 3.4
Nikolay Markov
Эм?
Во втором питоне нет asyncio
Mikhail
Nikolay Markov
Mikhail
trollius называется чтоли