在主目录下编写一个run.py
启动一个 ASGI 服务器,运行位于 app.py
文件中的 app
应用实例。服务器会在本地的 127.0.0.1:9999
地址上监听请求。
import uvicorn
if __name__ == "__main__":
try:
uvicorn.run("app:app", host="127.0.0.1", port=9999, reload=False) # , log_config=LOGGING_CONFIG
except KeyboardInterrupt:
...
开发测试时,使用如下命令,即可运行后端服务:
python run.py
使用场景
这段代码通常用于开发和测试阶段,快速启动一个本地服务器来运行 ASGI 应用。在生产环境中,可能会使用更复杂的配置(如进程管理、日志记录等)。
使用了 uvicorn
库来运行一个 ASGI(Asynchronous Server Gateway Interface)应用。以下是对代码的详细解读:
代码功能
-
导入
uvicorn
库:import uvicorn
uvicorn
是一个 ASGI 服务器,用于运行支持异步的 Python Web 框架(如 FastAPI、Starlette 等)。 -
主程序入口:
if __name__ == "__main__":
这是 Python 的标准写法,表示当脚本被直接运行时,执行下面的代码块。
-
运行 ASGI 应用:
uvicorn.run("app:app", host="127.0.0.1", port=9999, reload=False)
-
uvicorn.run()
是uvicorn
提供的函数,用于启动服务器并运行指定的应用。 - 参数解释:
-
"app:app"
:表示导入路径,第一个app
是模块名(即app.py
文件),第二个app
是模块中定义的应用实例对象。 -
host="127.0.0.1"
:服务器监听的主机地址,127.0.0.1
是本地回环地址,表示只接受来自本地的请求。 -
port=9999
:服务器监听的端口号,这里是 9999。 -
reload=False
:是否开启自动重载功能。如果设置为True
,当代码发生变化时,服务器会自动重启(通常用于开发环境)。
-
-
-
捕获键盘中断:
except KeyboardInterrupt: ...
-
当用户按下
Ctrl+C
停止服务器时,会触发KeyboardInterrupt
异常。 -
这里用
...
(省略号)占位,表示不进行任何额外处理,只是优雅地退出程序。
-
注意事项
-
确保
app.py
文件中定义了一个名为app
的 ASGI 应用实例。 -
如果需要热更新功能,可以将
reload=True
,但不建议在生产环境中使用。 -
如果需要自定义日志配置,可以取消注释
log_config=LOGGING_CONFIG
并定义相应的日志配置。