gpt4 book ai didi

python - FastAPI websocket 示例是否使进程死锁?

转载 作者:行者123 更新时间:2023-12-05 04:27:52 26 4
gpt4 key购买 nike

文档中的代码有一个 while True: block ,我很好奇这样的事情是否会导致进程死锁。如果我收到两个请求,第二个会不会通过?为什么或为什么不?

来源:https://fastapi.tiangolo.com/advanced/websockets/

@app.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket):
await websocket.accept()
while True:
data = await websocket.receive_text()
await websocket.send_text(f"Message text was: {data}")

最佳答案

简短的回答(基于您问题中给出的代码示例)是,后续请求将通过(无论 while True 循环如何)。

长答案取决于您希望在async 函数或while True 循环(即, I/O 绑定(bind)或 CPU 绑定(bind)操作?)。当使用 await 调用函数并涉及 I/O-bound operation 时(即,等待来自客户端的数据通过网络发送,等待磁盘中文件的内容被读取等),事件循环(主线程)然后可以继续并为其他人提供服务coroutines (请求)同时等待该操作完成(即,在您的情况下,等待消息被接收发送)。但是,如果 await 涉及 CPU-bound operation ,或者无论使用 await 调用它(即音频或图像处理、机器学习等),都会执行 CPU 绑定(bind)操作,事件循环 将被阻塞;这意味着,在 CPU 密集型操作完成之前,不会有更多的请求通过。

请引用this answer了解更多详情。

关于python - FastAPI websocket 示例是否使进程死锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72749927/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com