миграция веб-приложения flask, в настоящее время использующего веб-сервер uWSGI, на веб-сервер ASGI (uvicorn) - PullRequest
0 голосов
/ 18 февраля 2020

В настоящее время у меня есть flask веб-приложение, использующее uWSGI веб-сервер, который реализует стандарт WSGI, и мне нужно перенести это приложение на uvicorn веб-сервер, который реализует стандарт ASGI.

Если я выберу использование веб-сервера uvicorn из множества доступных опций, скажем, Hypercorn, Daphne, то какую веб-микрофрейм (вместо flask) следует выбрать? для из доступных опций скажем, Starlette, Quart, Django / Channels, чтобы выполнить эту миграцию гладко?

Иерархия имеет вид:

  Uvicorn: an ASGI server 

        Starlette: (uses Uvicorn) a web microframework

             FastAPI: (uses Starlette) an API microframework with several
                      additional features for building APIs, with data validation, etc.

Как то, что я прочитал до сих пор,

Quart - это Python веб-микрофрейм, основанный на Asyncio. Он предназначен для того, чтобы предоставить самый простой способ использования asyncio в веб-контексте, особенно с существующими Flask приложениями.

и

FastAPI показал себя как Python веб-фреймворк с одним из лучших показателей, если судить по сторонним тестам, благодаря использованию и поддержке Starlette. https://fastapi.tiangolo.com/benchmarks/

Пожалуйста, предложите с наилучшим подходом

Ответы [ 3 ]

2 голосов
/ 18 февраля 2020

Я не уверен, что для этого есть правильный ответ, так как он в основном зависит от личных мнений.

Лично я считаю, что Quart обеспечит самую простую миграцию из существующего Flask приложения. Это потому, что я намеренно сделал Quart API таким же, как API Flask, тем самым гарантируя, что все, что вы уже понимаете о приложениях Flask, по-прежнему применимо к приложениям Quart. Я надеюсь, что это позволит вам сосредоточиться на изучении асинхронных / ожидающих концепций вместо фреймворка.

Я думаю, вы найдете свой ответ, хотя, учитывая, что вам нужно сделать, это выходит за рамки и существуют расширения, чтобы вы могли это сделать. По сравнению с Flask экосистемой все экосистемы ASGI имеют меньшие размеры.

0 голосов
/ 26 февраля 2020

FastAPI не сопоставим с Flask. Это сопоставимо с чем-то вроде Flask -RESTPlus.

Starlette - справедливое сравнение с Flask. Starlette более современна по сравнению с современными стандартами, такими как Quart, Sani c, Bocadillo и др. c.

Что касается лучшего подхода ... просто труднее перенести приложение из одной среды к другому.
Я бы придерживался Gunicorn в любом случае (используя рабочий класс Uvicorn), так как автор FastAPI рекомендует сделать это.

0 голосов
/ 19 февраля 2020

Итак, я хотел бы добавить кое-что, к чему я пришел к выводу:

FastAPI извлек урок из Flask (и нескольких его плагинов) несколько вещей, включая его простоту. Например, способ объявления маршрутов очень похож. Это облегчает переход с Flask на FastAPI (что, как я вижу, делают многие люди).

Flask - это фреймворк, основанный на текущем / старом стандарте для Python web фреймворки: WSGI.

FastAPI основан на Starlette, которая использует более новый стандарт для асинхронных веб-фреймворков: ASGI.

Starlette была бы более сопоставимой с Flask, будучи чистым «микро» -фреймворк". Почти все, что вы можете сделать с Flask, вы можете сделать с Starlette (и так с FastAPI). Тем не менее, Starlette имеет некоторые функции, недоступные в Flask (как и во многих других платформах WSGI, например, Django, по крайней мере по умолчанию), такие как WebSockets, фоновые задачи и др.

Поскольку FastAPI основан на Starlette, он наследует все свои особенности. Включая WebSockets, поддержку GraphQL, шаблоны и т. Д. c. Таким образом, как минимум, с FastAPI вы можете делать практически все, что можете с Flask.

FastAPI также является микро-фреймворком (возможно, мини-фреймворком, поскольку он включает в себя некоторые дополнительные функции для API). Таким образом, вы можете структурировать проект так, как хотите, во многих случаях вы даже можете использовать большинство тех же файлов из Flask проекта (я это сделал).

Это было объяснено в этом Удивительный пост: https://www.quora.com/What-are-the-advantages-of-using-FastAPI-over-flask

Кроме того, Docker изображение с Uvicorn, управляемым Gunicorn для высокопроизводительных веб-приложений FastAPI в Python 3.7 и 3.6 с автоматической настройкой производительности, может быть используется для минимальной реализации. https://github.com/tiangolo/uvicorn-gunicorn-fastapi-docker

...