python - 如何在调试模式下运行fastapi项目在vscode中自动重新加载
问题描述
从 fastapi python 开始。
这就是我为我的服务器设置字符串的方式
class Server:
def __init__(self):
self.app = FastAPI()
def runServer(self, host: str, port: int,is_dev:bool):
uvicorn.run(self.app, host=host, port=port,debug=is_dev)
if __name__ == "__main__":
server = Server()
# read the environment variables
host: str = os.environ['host']
port: int = int(os.environ['port'])
is_dev: bool = bool(os.environ['dev'])
server.runServer(host, port, is_dev)
如果我进行任何更改,这会提升服务器但不会在自动重新加载模式下运行。
即使我尝试过
uvicorn.run(self.app, host=host, port=port, reload=is_dev)
我想重新加载不是一个选项,从而导致服务器中断。
--reload
我什至尝试在 launch.json 中传递args 但仍然无法正常工作
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Python: FastAPI",
"type": "python",
"request": "launch",
"program": "${workspaceFolder}/main.py",
"jinja": true,
"args": ["--reload"],
"env": {
"host": "127.0.0.1",
"port": "5555",
"dev": "true"
}
}
]
}
任何想法?我错过了什么吗?
解决方案
uvicorn
仅当app
参数是格式中的字符串<module>:<app_instance>
并且reload
或debug
参数为真时,才会以重新加载模式启动。像这样:
if __name__ == "__main__":
uvicorn.run("example:app", host="127.0.0.1", port=5000, reload=True)
文档摘录:
请注意,可以传递应用程序实例本身而不是应用程序导入字符串。
uvicorn.run(app, host="127.0.0.1", port=5000, log_level="info")
但是,此样式仅在您不使用多处理 (
workers=NUM
) 或重新加载 (reload=True
) 时才有效,因此我们建议使用导入字符串样式。
推荐阅读
- python - 我在检查过的标签和类之后进行了网络抓取,它返回无
- c# - 不断检查进程是否打开
- assembly - 32 位程序集引导加载程序在 VM/qemu 中有效,但在真实 PC 上无效
- oracle - 如何获取在 rds 上运行的 oracle 数据库的主机名
- python - LOG 问题 sklearn 错误 ValueError:输入包含 NaN、无穷大或对于 dtype('float64') 而言太大的值
- javascript - 将 JavaScript 函数重构为 TypeScript?
- rust - Rust 中的多个过滤案例
- r-markdown - 字体到 html 输出 Rmarkdown
- python - 用于绘图指标图的仪表针
- python - 使用 python 的 Mac 上的 Visual Studio Code 在“cerebro = bt.Cerebro()”行出现错误“语法错误:无效语法”