本文使用的是FastAPI框架,从这篇文章中可以了解到:
- 如何配置并将FastAPI应用部署到AIF上
- 为什么以及何时应该使用 FastAPI、Gunicorn 和 Uvicorn
- 如何以及为何设置 Gunicorn+Uvicorn 组合作为 ASGI 服务器
目录
一、直接上手
操作简单一步到位!
from fastapi import FastAPIimport uvicorn
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello World"}
if __name__ == '__main__':
uvicorn.run(app='main:app', host="127.0.0.1", port=8000, reload=True, debug=True)
启动命令
使用进程管理器确保你以弹性方式运行运行多个进程,你可以执行服务器升级而不会丢弃客户端的请求。
一个进程管理器将会处理套接字设置,启动多个服务器进程,监控进程活动,监听进程重启、关闭等信号。
1. 使用uvicorn
uvicorn main:app --host 0.0.0.0 --port 8000 --workers 4
Uvicorn 提供一个轻量级的方法来运行多个工作进程,比如 `--workers 4`,但并没有提供进行的监控。
uvicorn 在单进程上使用异步协程是有优势的、但是如果接口方法是同步的则走的多进程模式、也就是 workers 的数量、 这个时候 uvicorn 不如 gunicorn、性能上会有些限制。
2. 使用gunicorn
gunicorn main:app -b 0.0.0.0:8001 -w 4 -k uvicorn.workers.UvicornWorker
# `-w` 表示 worker 数量,`-k` 表示使用的 worker 类型,`-b` 表示绑定的地址和端口。
- Gunicorn 是成熟的,功能齐全的服务器,可以设定进程的类型,Uvicorn 可以作为 Gunicorn的进程类型。
- Uvicorn 内部包含有 Guicorn 的 workers 类,允许你运行 ASGI 应用程序,这些 workers 继承了所有 Uvicorn 高性能的特点。
- Guicorn 可以进行进程管理,如果进程死掉会重