繁体   English   中英

ASGI“寿命”协议似乎不受支持

[英]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.

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