如何以非阻塞的方式处理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
我是一名优秀的程序员,十分优秀!