gpt4 book ai didi

python-3.x - 使用 uvicorn.run 启动服务时,FastAPI 服务结果为 404

转载 作者:行者123 更新时间:2023-12-04 08:52:37 49 4
gpt4 key购买 nike

FastAPI 和 uvicorn 的新手,但我想知道为什么当我通过从命令行使用 uvicorn 启动它来运行我的“hello world”服务时,它工作正常,但是当从我的服务内部使用“uvicorn.run”方法时,服务启动,但是当我发送 GET 时,我总是收到 404,响应正文为 {"detail": "Not Found"}?
这是我的代码:

import uvicorn
from fastapi import FastAPI

app = FastAPI()
uvicorn.run(app, host="127.0.0.1", port=5049)


@app.get("/")
async def root():
return {"message": "Hello World"}
这总是以 404 返回,如下所示:
# curl http://127.0.0.1:5049/
{"detail":"Not Found"}
我的服务的输出显示:
INFO:     Started server process [28612]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://127.0.0.1:5049 (Press CTRL+C to quit)
INFO: 127.0.0.1:55446 - "GET / HTTP/1.1" 404 Not Found
如果我注释掉“uvicorn.run”行,然后从命令行启动服务(在 Windows 10 上运行):
uvicorn.exe test:app --host=127.0.0.1 --port=5049
我得到了正确的回应:
# curl http://127.0.0.1:5049/
{"message":"Hello World"}

最佳答案

因为,声明 uvicorn.run(app, host="127.0.0.1", port=5049) 之前执行root(...) 函数并且执行永远不会到达 root(...)功能。
但是,当您使用命令行运行该应用程序时,该应用程序会加载到 中。懒惰时尚,因此 root(...)函数正在执行。
这样的事情肯定能解决问题,

import uvicorn
from fastapi import FastAPI

app = FastAPI()


@app.get("/")
async def root():
return {"message": "Hello World"}


# at last, the bottom of the file/module
if __name__ == "__main__":
uvicorn.run(app, host="127.0.0.1", port=5049)

关于python-3.x - 使用 uvicorn.run 启动服务时,FastAPI 服务结果为 404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64019054/

49 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com