Может быть и так облачный сервис или любой другой тяжелый класс.
Возможные способы — сделать это с помощью отложенной загрузки и шаблона 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( и затем получить это приложение из запросов, но тогда вам придется передать запрос в каждую функцию, не связанную с маршрутизацией.
Все способы, которые я описал, являются либо уродливыми, неудобными, не питоническими, либо еще хуже. У нас также нет здесь локальных потоков потоков и прокси-объектов, как в flask, так каков наилучший подход для такого рода проблему, которую я описал выше?
Спасибо!
Подробнее здесь: https://stackoverflow.com/questions/676 ... in-fastapi
Мобильная версия