用websockets优雅关闭uvicorn starlette应用程序

2024-03-29 10:33:12 发布

您现在位置:Python中文网/ 问答频道 /正文

在这个示例Starlette应用程序中有一个打开的websocket连接,如何关闭Starlette应用程序?我在乌维科恩跑步。每当我按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()

我尝试在shutdown事件上切换bool变量,但该变量从未更新。它总是False。在

例如

^{pr2}$

Tags: toapp应用程序示例forwsawait跑步
1条回答
网友
1楼 · 发布于 2024-03-29 10:33:12

我真的不能重现这个问题,我明白

INFO: Started server process [31]
INFO: Waiting for application startup.
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
^CINFO: Shutting down
INFO: Waiting for application shutdown.
INFO: Finished server process [31]

但我在自己的异步应用程序中优雅地关闭的是:

^{pr2}$

您可能需要将await websocket.close()移到shutdown方法中。在

相关问题 更多 >