[英]ASGI 'lifespan' protocol appears unsupported
我有一个在 fastapi 和 aiofiles 上运行的异步代码,我试图从 .json 文件加载和保存我的信息,但是每次我关闭程序时,它只保存字典的键并显示“ASGI 'lifespan'协议似乎不受支持”按摩
这是我的开启/关闭部分:
@app.on_event("startup")
async def startup_event():
global beers
try:
async with aiofiles.open("data.json", mode='r+', json=True) as file:
beers = await file.read()
except:
beers = {}
@app.on_event("shutdown")
async def on_exit_app():
async with aiofiles.open("data.json", "w+") as outfile:
await outfile.write(beers)
任何想法问题出在哪里?
这 99% 意味着on_event("shutdown")
函数中的on_event("shutdown")
引发了服务器(FastAPI/Starlette)未捕获的错误,并且应用程序崩溃,而不是正确结束。 这导致 uvicorn 相信服务器不支持 ASGI 协议的 livespan 部分。
如果您使用附加选项--lifespan on
运行uvicorn
,则会显示错误,您可以对其进行调试。
请参阅Starlette 错误报告。
这只是一个你可以省略的断言,据我所知,你使用 Uvicorn 作为 HTTP 服务器,因为 FastAPI 构建在 ASGI 框架之上,而 Uvicorn 是一个 ASGI HTTP 服务器,它上面有一些协议。 ASGI 协议支持 http、websocket。
Uvicorn 将 lifespan 的值设置为auto
并且断言来自那里。
if self.config.lifespan == "auto":
msg = "ASGI 'lifespan' protocol appears unsupported."
但是你可以使用--lifespan on
来解决这个问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.