【问题标题】:How to process websocket data in a non-blocking manner?如何以非阻塞方式处理 websocket 数据?
【发布时间】:2026-01-30 18:35:01
【问题描述】:

如何以非阻塞方式处理websocket数据?

以下示例显示,当调用 ws.recv() 并且没有收到任何内容时,ws.recv() 会阻止其余代码运行:

from websocket import create_connection
url = 'ws://example.com'
ws = create_connection(url)

ws.recv()  # blocks

如何实现(不阻塞):

from websocket import create_connection
url = 'ws://example.com'
ws = create_connection(url)

# non-blocking
if ws.not_empty():
    ws.recv()  

如何以非阻塞方式处理websocket数据?

【问题讨论】:

    标签: python python-3.x python-2.7 websocket


    【解决方案1】:

    如果可以选择使用 Python >= 3.5,您可能需要查看asyncio,它允许您编写单线程但并发的代码。这对于处理 i/o 绑定代码(例如网络)通常很有用。

    请注意,如果您是第一次使用 asyncio,会有一点学习曲线。

    一旦您熟悉了基础知识,就会有一个出色的 websockets 模块,它利用了 asyncio

    https://pypi.python.org/pypi/websockets

    【讨论】: