簡體   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