Size: a a a

2021 April 02

RB

Roman Bolkhovitin in rannts
источник

БС

Байт Словович... in rannts
о пасиб.. Надо посмотреть как он это сделал этот @kinded
источник

БС

Байт Словович... in rannts
а по поводу этого... раньше так же к метаклассам относились. Но когда припрет, разбираешься и понимаешь, что ничего сложного. В общем когда лютая магия где то внутри либы, то это не страшно.
источник

БС

Байт Словович... in rannts
хм: https://github.com/dry-python/returns/blob/master/returns/primitives/hkt.py
похоже магия более высокого уровня, чем я предполагал.. В общем надо статью полностью читать
источник

БС

Байт Словович... in rannts
Волшебная функция выглядит вот так...
def kinded(function: _FunctionType) -> Kinded[_FunctionType]:
   return function  # type: ignore
источник

『Serg』 in rannts
Байт Словович
о пасиб.. Надо посмотреть как он это сделал этот @kinded
самое забавное что это живой человек оказался)) это Кайндед
источник

KK

Kirill (Cykooz) Kuzm... in rannts
Байт Словович
угу, есть такое.. Нифига не понимаю зачем, но есть. Но надо посмотреть как они это сделали. У меня не получается сделать одновременно синхронный и асинхронный код, без полного дублирования.
Ну можно синхронную версию делать как asyncio.run(async_func()) - тогда можно избежать дублирования кода.
источник

БС

Байт Словович... in rannts
нет низя так..
есть библиотека, которая должна работать в синхронном и асинхронном варианте
источник

KK

Kirill (Cykooz) Kuzm... in rannts
Хотя конечно придётся поприседать, если надо сохранять какой-то асинхронный стейт между вызовами. Например HttpSession
источник

БС

Байт Словович... in rannts
В общем вот статья которая описывает боль: https://habr.com/ru/company/oleg-bunin/blog/512650/
но я еще её не прочитал
источник

KK

Kirill (Cykooz) Kuzm... in rannts
Байт Словович
нет низя так..
есть библиотека, которая должна работать в синхронном и асинхронном варианте
Ну так она и будет работать. Просто синхронная версия будет в реальности запускать внутри себя временно евент луп.
источник

БС

Байт Словович... in rannts
а если у меня асинхронный код? Второй раз луп я не запущу..
источник

KK

Kirill (Cykooz) Kuzm... in rannts
Байт Словович
а если у меня асинхронный код? Второй раз луп я не запущу..
Выдавать ошибку - "нафиг ты используешь синхронное API в асинхронном окружении"
источник

БС

Байт Словович... in rannts
Фактически есть один способ.. Это написать по масимомуму async  код, и если надо вызвать долгие синхронные функции, то надо использовать пул. Так делает fastapi
источник

БС

Байт Словович... in rannts
Задача такая.
Есть сервис.
К нему надо написать клиенскую библиотеку.

Эта библиотека используется в других микросервисах. Есть микросервисы на синхронном коде, а есть на асинхронном.
источник

БС

Байт Словович... in rannts
Есть замечательная штука httpx
источник

БС

Байт Словович... in rannts
и она норм.. Но фактически там два разных клиента, которые есть копипаста с добавлением волшебных слов async await
источник

БС

Байт Словович... in rannts
И если в недрах httpx это допустимо, то писать два клиента, у меня желания нет
источник

KK

Kirill (Cykooz) Kuzm... in rannts
Байт Словович
Задача такая.
Есть сервис.
К нему надо написать клиенскую библиотеку.

Эта библиотека используется в других микросервисах. Есть микросервисы на синхронном коде, а есть на асинхронном.
Вроде нет проблем. Если у тебя асинхронный микросервис - используй в нём асинхронный интерфейс библиотеки. Если же микросервис синхронный - используй синхронный интерфейс.
источник

KK

Kirill (Cykooz) Kuzm... in rannts
Если тебе надо шарить общий код между этими сервисами - делаешь точно так же. Основная реализация асинхронная, а синхронная версия просто делает asyncio.run()
источник