从dockerfile中的uvicorn命令运行fastapi和从pythonfile运行fastapi有什么区别吗?

pkln4tw6  于 2023-01-04  发布在  Docker
关注(0)|答案(2)|浏览(232)

我正在运行一个快速API,在开发时,我的www.example.com文件中包含以下代码app.py
示例中的代码app.py:

import uvicorn

if __name__=="__main__":
    uvicorn.run("app.app:app",host='0.0.0.0', port=4557, reload=True, debug=True, workers=3)

所以我准备在我的Dockerfile中运行CMD ["python3","app.py"]
在fastapi的例子中,他们做了类似这样的事情:

CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80"]

我想知道这两种方法的区别是什么,因为我认为它们都有效。

d5vmydt9

d5vmydt91#

更新(2022年12月31日)

作为来自*@Marcelo Trylesinski * 的更新,从uvicorn v 0.19.0中删除了--debug标志(参考#1640)。

    • 不,没有区别**

The commadline run method ( uvicorn app.main:app ) and executing the app.py using python command ( python app.py ) are the same. Both methods are calling the**uvicorn.main.run(...)function under the hood.
换言之,
uvicorn命令是uvicorn.run(...)**函数的 * 快捷方式 *。
在你的例子中函数调用

uvicorn.run("app.app:app",host='0.0.0.0', port=4557, reload=True, debug=True, workers=3)

可以通过UVICORN命令行来完成,

uvicorn app.app:app --host 0.0.0.0 --port 4557 --reload --debug --workers 3

旁注

-debug***选项在命令行选项帮助页面中是隐藏的,但可以在源代码中找到。因此,使用uvicorn命令运行应用程序可以被视为***生产操作。

pobjuy32

pobjuy322#

答案是。应用程序不会有任何区别,使用Docker部署只是更容易,如果没有Docker,您需要使用ASGI兼容服务器(如Uvicorn)运行它,此外,您可能需要设置一些工具,以确保在它停止或崩溃时自动重新启动它。而不是尝试手动处理它,Docker映像可以自动处理所有这些作业。

相关问题