繁体   English   中英

如何在调试模式下运行 fastapi 项目在 vscode 中自动重新加载

[英]how to run fastapi project in debug mode auto reload in 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)

我想重新加载不是一个选项,从而导致服务器中断。

我尝试在 launch.json 中传递--reload参数,但仍然无法正常工作

{
    // 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"
            }
        }
    ]
}

任何的想法? 我错过了什么吗?

仅当app参数是<module>:<app_instance>格式的字符串并且reloaddebug参数为真时, uvicorn才会以重新加载模式启动。 像这样:

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 ) 时才有效,因此我们建议使用导入字符串样式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM