Учитывая пример этого приложения Starlette с открытым подключением к веб-сокету, как вы закрываете приложение Starlette?Я бегу на Uvicorn.Всякий раз, когда я нажимаю Ctrl+C
, вывод будет Waiting for background tasks to complete.
, который зависает навсегда.
from starlette.applications import Starlette
app = Starlette()
@app.websocket_route('/ws')
async def ws(websocket):
await websocket.accept()
while True:
# How to interrupt this while loop on the shutdown event?
await asyncio.sleep(0.1)
await websocket.close()
Я пытался переключить переменную bool в событии shutdown, но эта переменная никогда не обновляется.Это всегда False
.
например.
app.state.is_shutting_down = False
@app.on_event('shutdown')
async def shutdown():
app.state.is_shutting_down = True
@app.websocket_route('/ws')
async def ws(websocket):
await websocket.accept()
while app.state.is_shutting_down is False: