这段代码是 FastAPI 应用的启动入口,让我们一步步解释为什么需要它:

1. if __name__ == "__main__": 的作用

这是 Python 的一个标准写法,用于判断:

  • 当直接运行 app.py 文件时__name__ 变量会被设置为 "__main__",此时执行缩进内的代码
  • app.py 被其他模块导入时__name__ 会是模块名 "app",此时不执行缩进内的代码

这样可以确保启动服务器的代码只在直接运行文件时执行,而不会在被导入时意外启动。

2. import uvicorn 的作用

FastAPI 是一个异步 Web 框架,它需要一个 ASGI (Asynchronous Server Gateway Interface) 服务器来运行。uvicorn 是最常用的 ASGI 服务器之一,专门用于运行 FastAPI 等异步应用。

这行代码在需要时才导入 uvicorn,避免不必要的资源消耗。

3. uvicorn.run() 的参数解释

uvicorn.run(
    "app:app",        # 应用路径:模块名(文件) + 应用实例名
    host="0.0.0.0",   # 监听的主机地址:0.0.0.0 表示监听所有网络接口
    port=8000,        # 监听的端口号
    reload=True       # 开发模式:修改代码后自动重启服务器
)
  • “app:app”:指定要运行的应用。第一个 app 是模块名(即 app.py 文件),第二个 app 是你在文件中创建的 FastAPI 实例(app = FastAPI(...))。
  • host=“0.0.0.0”:让服务器可以被外部访问(不仅仅是本机的 localhost)。
  • port=8000:服务器监听的端口,你可以通过 http://localhost:8000 访问应用。
  • reload=True:开发模式的便利功能,修改代码后服务器会自动重启,无需手动停止再启动。

4. 总结

这段代码的核心作用是:提供一个简单的方式,让你可以直接运行 python app.py 来启动 FastAPI 服务器

如果没有这段代码,你需要在命令行中手动执行:

uvicorn app:app --host 0.0.0.0 --port 8000 --reload

这段代码只是提供了一个更便捷的启动方式,相当于把命令行参数写进了代码里。

实际运行效果

当你执行 python app.py 时,这段代码会:

  1. 导入 uvicorn 服务器
  2. 启动服务器监听 8000 端口
  3. 将 FastAPI 应用挂载到服务器上
  4. 开发模式下,修改代码会自动重启

这样你就可以通过浏览器访问 http://localhost:8000 来使用你的 API 了。

uv run pytest -xvs --ignore=test_streaming.py