
Tishka17
17.07.2019
22:17:19

Какого Бля
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

fn main() {}
17.07.2019
22:19:05

Tishka17
17.07.2019
22:19:09

Mikhail -Ofast
17.07.2019
22:19:43

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

fn main() {}
17.07.2019
22:26:53

Какого Бля
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

Nikolay
17.07.2019
22:34:27

Какого Бля
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()

Nikolay
17.07.2019
22:36:25

Tishka17
17.07.2019
22:37:03

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

fn main() {}
17.07.2019
22:37:05

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

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

Nikolay
17.07.2019
22:38:07

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

Nikolay
17.07.2019
22:38:48

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

Nikolay
17.07.2019
22:38:54

Какого Бля
17.07.2019
22:39:38

Mikhail -Ofast
17.07.2019
22:40:01

Какого Бля
17.07.2019
22:40:04

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

Nikolay
17.07.2019
22:40:42

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

Nikolay
17.07.2019
22:41:04

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

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

Tishka17
17.07.2019
22:42:02

Mikhail -Ofast
17.07.2019
22:42:09

Nikolay
17.07.2019
22:42:12

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