Уютный чат для профессионалов, занимающихся поиском питоньих мудростей. Как не получить бан: https://t.me/ru_python/1961404
там же как пишутся приложения - все приложение засовывается в спринг, он тебе менеджит зависмости\споупы,с ним же можно и тестировать. и реальной потребности дёргать контейнер вручную как таковой нету.
Читать полностью…ну вот представь что у тебя есть основной цикл событий в духе
while (true) {
BaseEvent event = src.get_next();
handle(event)
}
смотря где. Если на границе скоупа дергаешь container.get(интерфейс), если внутри основного кода - просто в конструктор получишь
Читать полностью…так ладно, представь что я джавист с ООП головного мозга. как мне из контейнера получить не someclient, а штуку у которой одинаковый с ней интерфейс но другая реализация (мок например)
Читать полностью…учитывая то, что я не могу на ее просчет тратить времени, когда запрос уже поступил. тогда данные уже должны быть сформированы
Читать полностью…Если бы скоупов не было, один раз бы все в мейне создал и полетел. Но так как мы хотим на запрос пересоздавать что-то, в этом месте приходится контейнер дергать
Читать полностью…собственно с дишкой у тебя точно так же - ты отедлньо настраиваешь фабрики в провайдерах (бины?) и отдельно интеграцию с фреймворком (инжект в хэндлер)
Читать полностью…если у тебя цикл событий отдельно от спринга, спринг кто-то должен дернуть в момент вызова хэндлера
Читать полностью…ну спринг это всё рефлексией делает, по аноташкам. а так наивная реализация - где-то мапу держать хендлеров и типов. их можно паттерн матчить например. ну и так же держать инстансы зависимостей и вставлять их куда надо (или создавать новые). но вот в том то и дело, что у того же спринга или асп нета это всё под капотом работает и вообще не парит разработчика) но в принципе понял твою мысль
Читать полностью…class SomeProtocol(Protocol):
async def foo(self, session_id: str) -> None: ...
class Impl:
async def foo(self, session_id: str) -> None:
print("1")
class UseCase:
def __init__(self, gateway: SomeProtocoll):
self._gateway = gateway
ладно, а как вы интерфейсы то в питоне описываете? если влом можешь не отвечать, у чатагпт спрошу
Читать полностью…ты не можешь полностью отказаться от вызова контейнера, потому что скоупы контролировать надо
Читать полностью…разница сервис локатора и контейнера в том, что
1. с сервис локатором ты всё достаешь из него
2. с контейнером ты его дергаешь только на границах скоупов в цикле событий, а в сами классы происходит DI
client = container.get(SomeClient) # `SomeClient` has Scope.APP, so it is accessible hereсервис локатор же Читать полностью…
client = container.get(SomeClient) # same instance of `SomeClient`
если запустить asyncio задачу для просчета кеша для io-bound задачи вместо того ,чтобы просчитывать эту задачу в интеракторе, то я получу прирост в производительности?
Читать полностью…А какие есть варианты чтобы синхронный код работал асинхронно? Очевидно что можно создать пул ThreadPoolExcutor, чтобы после 10 запросов сразу все или легло или в лучшем случае встало в очередь.
Там такая запара 120к строчек в асинхронный формат переделывать.