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