Веб-версияОткрыть в Telegram

ПостНемного про роутинг в FastAPI

7 апреля 2023
К
Коробка с питоном
Немного про роутинг в FastAPI Если вы пользовались FastAPI, то наверняка знаете, что роут можно сделать либо асинхронным, либо синхронным. Так когда какой надо делать? Скорее всего первая мысль которая придет вам в голову будет звучать как-то так - если у нас есть I/O-bound задачи (например работа с БД), то надо использовать асинхронщину, если всё остальное - потоки, процессы и так далее. Но тут есть несколько нюансов: 1) Под капотом FastAPI отлично справляется с обработкой как синхронных, так и асинхронных роутов. Если роут асинхронный, то задача по его обработке запустится в event loop, если синхронный - то в thread pool. 2) Так как синхронные роуты запускаются в thread pool, иногда просто нет вообще никакого смысла тащить в проект асинхронную ORM, так как всё и так будет работать не блокируя основное приложение. Возьмем вот такой роут: @router.get("/nonblocking-sync-operation") def nonblocking_sync_operation(): time.sleep(10) return {"test": "test"} После того как мы перейдем по этому роуту, мы будем ждать 10 секунд и в конце получим ответ. При этом сам FastAPI не заблокируется, и сможет обрабатывать другие подключения - потому что функция запустилась в отдельном потоке. А теперь возьмем вот такой роут: @router.get("/blocking-sync-operation") async def blocking_sync_operation(): time.sleep(10) return {"test": "test"} Здесь после перехода по роуту функция запустится в event loop и sleep заблокирует всё приложение до тех пор, пока он не пройдет. То есть, FastAPI вообще перестанет принимать подключения до тех пор, пока функция не выполнится. Поэтому, если вам нужно написать на FastAPI небольшой CRUD и вы думаете тащить асинхронную ORM - задумайтесь, а надо ли она вам там вообще? Ссылки: - Path operation functions #fastapi
19 · 560 ·

Рядом в ленте

ККоробка с питономКогда-то давно, когда я только изучал Django, мне хотелось избавиться от бойлерплейта в темплейтах и вынести некоторые части шаблонов (например кнопки) в какие-ККоробка с питономЕсли вы хоть раз задумывались о том, можно ли фичи FastAPI (автогенерация OpenAPI, интеграция с Pydantic, поддержка асинхронности и т.д.) добавить в Django, то
это сообщение
ККоробка с питономВ PEP 695 предлагают наконец переделать синтаксис для указания дженериков и ввести новый оператор для указания алиасов. 1) Что там с дженериками? Например, еслиККоробка с питономОчень годный доклад о том как начинать проекты на Django. Рассмотрели нужность батареек, как правильно писать логику и что там на самом деле с админкой и DRF. #
ККоробка с питономКоробка с питоном@boxwithpython · канал · Технологии
488подписчиков154постов в индексе
Лента площадки Открыть в Telegram

Открытая публичная лента из поискового индекса ChatCrawler — «Google по публичному Telegram»; обновляется по мере обхода площадки. Время — UTC.

Только публичный контент, официальный API Telegram. О проекте · Вопросы · Чего мы не делаем · Убрать страницу из выдачи · Каталог · Поиск · Как мы считаем