如何以非阻塞方式处理 websocket 数据?
Posted
技术标签:
【中文标题】如何以非阻塞方式处理 websocket 数据?【英文标题】:How to process websocket data in a non-blocking manner? 【发布时间】:2018-03-23 00:08:39 【问题描述】:如何以非阻塞方式处理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数据?
【问题讨论】:
【参考方案1】:如果可以选择使用 Python >= 3.5,您可能需要查看asyncio
,它允许您编写单线程但并发的代码。这对于处理 i/o 绑定代码(例如网络)通常很有用。
请注意,如果您是第一次使用 asyncio
,会有一点学习曲线。
一旦您熟悉了基础知识,就会有一个出色的 websockets
模块,它利用了 asyncio
:
https://pypi.python.org/pypi/websockets
【讨论】:
以上是关于如何以非阻塞方式处理 websocket 数据?的主要内容,如果未能解决你的问题,请参考以下文章
如何以非阻塞方式链接期货?也就是说,如何在不阻塞的情况下将一个future用作另一个future的输入?