Оптимальный способ инициализировать тяжелые сервисы только один раз в FastAPI.Python

Программы на Python
Ответить
Anonymous
 Оптимальный способ инициализировать тяжелые сервисы только один раз в FastAPI.

Сообщение Anonymous »

Приложение FastAPI, над которым я начал работать, использует несколько сервисов, которые я хочу инициализировать только один раз, при запуске приложения, а затем использовать методы этого объекта в разных местах.

Может быть и так облачный сервис или любой другой тяжелый класс.
Возможные способы — сделать это с помощью отложенной загрузки и шаблона Singlenton, но я ищу лучший подход для FastAPI.
Другой Возможный способ — использовать класс Depends и кэшировать его, но его использование имеет смысл только с методами маршрута, а не с другими обычными методами, которые вызываются из методов маршрута.

Пример:< /p>

Код: Выделить всё

async def common_parameters(q: Optional[str] = None, skip: int = 0, limit: int = 100):
return {"q": q, "skip": skip, "limit": limit}

async def non_route_function(commons: dict = Depends(common_parameters)):
print(commons)         # returns `Depends(common_parameters)`

@router.get('/test')
async def test_endpoint(commons: dict = Depends(common_parameters)):
print(commons)         # returns correct dict
await non_route_function()
return {'success': True}
Также можно использовать событие @app.on_event("startup") для инициализации тяжелого класса, но вы не знаете, как сделать этот инициализированный объект доступным из любого места , без использования синглтона.
Еще один некрасивый способ — сохранить инициализированные объекты в @app( и затем получить это приложение из запросов, но тогда вам придется передать запрос в каждую функцию, не связанную с маршрутизацией.
Все способы, которые я описал, являются либо уродливыми, неудобными, не питоническими, либо еще хуже. У нас также нет здесь локальных потоков потоков и прокси-объектов, как в flask, так каков наилучший подход для такого рода проблему, которую я описал выше?
Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/676 ... in-fastapi
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»