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

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

如何以非阻塞的方式处理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 >= 3.5,您可能需要查看 asyncio,它允许您编写单线程但并发的代码。这对于处理 I/O 绑定(bind)代码(例如网络)通常很有用。

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

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

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

关于python - 如何以非阻塞的方式处理websocket数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49440425/

相关文章:

python - Pandas 操纵: Non-distinct groups

python-2.7 - 值错误: Could not reserve memory block

python - 如何在不绑定(bind) IP 的情况下在特定端口上运行服务

python - 使用 ElementTree 解析 xml

python - 如何在 Linux 中使用不同的参数并行运行 python 脚本?

json - Python 和 BeautifulSoup : How to convert JSON into CSV

python - 为什么 namedtuples 使用的内存比字典少?

python - 如何使用数据框创建不确定长度的Excel电子表格?

python - 为什么这段 python 代码不是线程安全的?

python - Cython:将 C 缓冲区内存 View 返回给 Python