1、Uvicorn启动
Uvicorn 是一个轻量级的 ASGI 服务器,它可以用来直接运行 FastAPI 应用。以下是如何使用 Uvicorn 启动 FastAPI 应用的步骤:
-
首先,确保你已经安装了
fastapi
和uvicorn
。如果没有安装,可以通过 pip 安装它们pip install fastapi uvicorn
-
创建你的 FastAPI 应用。例如,创建一个名为
main.py
的文件,包含你的 FastAPI 应用代码:from fastapi import FastAPI app = FastAPI() @app.get("/") def read_root(): return {"Hello": "World"}
-
在命令行中,使用 Uvicorn 运行你的应用:
uvicorn main:app --reload
2、直接python启动
修改python代码
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
if __name__ == "__main__":
import uvicorn
uvicorn.run(main:app, host="127.0.0.1", port=8000)
遇到问题:我部署了一个多模态模型,每次模型加载的速度会很慢,不用api运行模型时大概几秒,使用上面的启动方式时,模型的速度就会需要40多秒。
解决方法:将main:app该为app=app,
if __name__ == "__main__":
import uvicorn
uvicorn.run(app=app, host="127.0.0.1", port=8000)
使用 app="main:app"
当你使用 app="main:app"
这种格式时,Uvicorn 会尝试按照给定的字符串来导入应用。这里的 "main:app"
意味着 Uvicorn 会在当前目录下查找名为 main.py
的文件,并从中导入名为 app
的对象。这种方式在某些情况下会导致额外的导入延迟,尤其是当你的应用或其依赖项非常复杂时。
使用 app=app
当你直接传递 app=app
时,你实际上是在告诉 Uvicorn 使用当前脚本中已经创建的 app
对象。这种方式避免了额外的导入步骤,因为 app
对象已经在当前的命名空间中可用。这通常会导致更快的启动时间,因为你避免了解析和执行额外的导入语句。