а по поводу этого... раньше так же к метаклассам относились. Но когда припрет, разбираешься и понимаешь, что ничего сложного. В общем когда лютая магия где то внутри либы, то это не страшно.
угу, есть такое.. Нифига не понимаю зачем, но есть. Но надо посмотреть как они это сделали. У меня не получается сделать одновременно синхронный и асинхронный код, без полного дублирования.
Ну можно синхронную версию делать как asyncio.run(async_func()) - тогда можно избежать дублирования кода.
Фактически есть один способ.. Это написать по масимомуму async код, и если надо вызвать долгие синхронные функции, то надо использовать пул. Так делает fastapi
Задача такая. Есть сервис. К нему надо написать клиенскую библиотеку.
Эта библиотека используется в других микросервисах. Есть микросервисы на синхронном коде, а есть на асинхронном.
Вроде нет проблем. Если у тебя асинхронный микросервис - используй в нём асинхронный интерфейс библиотеки. Если же микросервис синхронный - используй синхронный интерфейс.
Если тебе надо шарить общий код между этими сервисами - делаешь точно так же. Основная реализация асинхронная, а синхронная версия просто делает asyncio.run()