为什么 Pod 中的 运行 一个 python 文件与直接 运行 它的行为不同?
Why does running a python file inside a pod not have the same behavior as running it directly?
我有一个包含以下代码的 FastAPI 应用程序
@app.on_event("startup")
async def startup_event():
"""Initialize application services"""
print("Starting the service")
当我直接从终端 运行 FastAPI 时,我得到以下输出
INFO: Started server process [259936]
INFO: Waiting for application startup.
Starting the service
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:3000 (Press CTRL+C to quit)
可以看到打印语句被执行了
但是,当同一个应用程序自动 运行 在 Kubernetes 集群中时,我得到以下输出
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:3000 (Press CTRL+C to quit)
打印语句没有被执行,事实上,函数内的任何附加代码都没有被执行。
但是,如果我这样退出进程:
@app.on_event("startup")
async def startup_event():
"""Initialize application services"""
print("Starting the service")
exit(99)
进程存在然后我可以看到打印语句。
SystemExit: 99
ERROR: Application startup failed. Exiting.
Starting the service
这里有什么问题?
编辑:实际上没有任何代码被执行,我几乎在任何地方都放置了打印语句,但没有打印任何内容,但是网络服务器不知何故 运行s...
所以,实际上,我的代码、FastAPI、asyncio 或 Kubernetes 都没有问题。
实际上一切正常,只是输出被缓冲了。
在print语句中加上flush=True后,一切都显示出来了。
我正在回答这个问题,以防将来有可怜的人偶然发现这个帖子。
我花了好几天调试这个!!!
我有一个包含以下代码的 FastAPI 应用程序
@app.on_event("startup")
async def startup_event():
"""Initialize application services"""
print("Starting the service")
当我直接从终端 运行 FastAPI 时,我得到以下输出
INFO: Started server process [259936]
INFO: Waiting for application startup.
Starting the service
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:3000 (Press CTRL+C to quit)
可以看到打印语句被执行了
但是,当同一个应用程序自动 运行 在 Kubernetes 集群中时,我得到以下输出
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:3000 (Press CTRL+C to quit)
打印语句没有被执行,事实上,函数内的任何附加代码都没有被执行。
但是,如果我这样退出进程:
@app.on_event("startup")
async def startup_event():
"""Initialize application services"""
print("Starting the service")
exit(99)
进程存在然后我可以看到打印语句。
SystemExit: 99
ERROR: Application startup failed. Exiting.
Starting the service
这里有什么问题?
编辑:实际上没有任何代码被执行,我几乎在任何地方都放置了打印语句,但没有打印任何内容,但是网络服务器不知何故 运行s...
所以,实际上,我的代码、FastAPI、asyncio 或 Kubernetes 都没有问题。
实际上一切正常,只是输出被缓冲了。
在print语句中加上flush=True后,一切都显示出来了。
我正在回答这个问题,以防将来有可怜的人偶然发现这个帖子。
我花了好几天调试这个!!!