给定这个带有开放 websocket 连接的示例 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()
我尝试在关闭事件上切换一个布尔变量,但该变量永远不会更新。它总是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: