Uvicorn vs Gunicorn

最近新接触了一个FastAPI的小项目,发现HTTP SERVER是采用的docker,对应的基础镜像是tiangolo/uvicorn-gunicorn-fastapi:python3.7。

这里有个问题,FastAPI官网demo中使用的是uvicorn,这里的tiangolo/uvicorn-gunicorn-fastapi:python3.7应该是uvicorn+gunicorn做HTTP SERVER,为何?

关于Uvicorn和Gunicorn的区别,大家可以参考

https://stackshare.io/stackups/gunicorn-vs-unicorn

其要点是:

Gunicorn是"A Python WSGI HTTP Server for UNIX";

Uvicorn 是"Rack HTTP server for fast clients and Unix"

这里还是有些疑问,因为Uvicorn官网对Uvicorn的定义是:

Uvicorn is a lightning-fast ASGI server implementation, using uvloop and httptools.

这一点和Gunicorn的定义就很接近了。

从tiangolo/uvicorn-gunicorn-fastapi:python3.7的介绍(https://github.com/tiangolo/uvicorn-gunicorn-docker)中可以看到:

Uvicorn

Uvicorn is a lightning-fast "ASGI" server.

It runs asynchronous Python web code in a single process.

Gunicorn

You can use Gunicorn to manage Uvicorn and run multiple of these concurrent processes.

That way, you get the best of concurrency and parallelism.

这里把Uvicorn描述为单进程的ASGI server,而Gunicorn是管理运行多个Uvicorn,以达到并发与并行的最好效果。

如果大家有其他见解请留言。

 

posted @ 2020-12-09 09:58  LeoGIS  阅读(5670)  评论(2编辑  收藏  举报