使用websocket正确使用streamz

使用websocket正确使用streamz,websocket,tornado,streamz,Websocket,Tornado,Streamz,我正在试图找到一种使用streamz处理流式数据的正确方法。使用websocket client加载我的流式数据,然后执行以下操作: #打开流并将更新推送到流中 stream=stream() #建立联系 ws=create_连接(“ws://localhost:8765”) #获取持续更新 从龙卷风进口 从tornado.ioloop导入ioloop 异步定义f(): 尽管如此: 等待gen.sleep(0.001) data=ws.recv() stream.emit(数据) IOLoop.

我正在试图找到一种使用
streamz
处理流式数据的正确方法。使用
websocket client
加载我的流式数据,然后执行以下操作:

#打开流并将更新推送到流中
stream=stream()
#建立联系
ws=create_连接(“ws://localhost:8765”)
#获取持续更新
从龙卷风进口
从tornado.ioloop导入ioloop
异步定义f():
尽管如此:
等待gen.sleep(0.001)
data=ws.recv()
stream.emit(数据)
IOLoop.current().add_回调(f)
虽然这样做有效,但我发现我的流无法跟上流数据的速度(因此我在流中看到的数据比流数据慢几秒钟,流数据既大容量又高频率)。我尝试将
gen.sleep(0.001)
设置为一个较小的值(删除它会完全停止jupyter实验室),但问题仍然存在


这是使用websocket将streamz与流式数据连接的正确方法吗?

我认为
websocket client
不提供异步API,因此它会阻塞事件循环

您应该使用异步websocket客户端,例如:

从tornado.websocket导入websocket\u连接
ws=websocket_connect(“ws://localhost:8765”)
异步定义f():
尽管如此:
data=wait ws.read_message()
如果数据为无:
打破
其他:
wait stream.emit(数据)
#考虑到您正在从本地主机接收数据
#插座,它会非常快,还有“等待”
#上面的语句不会暂停while循环
#足够的时间让事件循环有机会
#做其他事情。
#因此,小时间的睡眠要暂停
#while循环。
等待gen.sleep(0.0001)

如果从远程连接接收数据或向远程连接发送数据,而远程连接的速度足以在
wait
语句处挂起while循环,则无需睡眠。

我认为
websocket client
不提供异步API,因此它会阻塞事件循环

您应该使用异步websocket客户端,例如:

从tornado.websocket导入websocket\u连接
ws=websocket_connect(“ws://localhost:8765”)
异步定义f():
尽管如此:
data=wait ws.read_message()
如果数据为无:
打破
其他:
wait stream.emit(数据)
#考虑到您正在从本地主机接收数据
#插座,它会非常快,还有“等待”
#上面的语句不会暂停while循环
#足够的时间让事件循环有机会
#做其他事情。
#因此,小时间的睡眠要暂停
#while循环。
等待gen.sleep(0.0001)

如果您正在从远程连接接收/发送数据,而远程连接的速度足以在
wait
语句处挂起while循环,则无需睡眠。

非常感谢您,只是为了澄清您对
sleep
的评论,这只是在
jupyter lab
内运行它的问题,对吗?如果我在一个独立的脚本中运行这个脚本,没有其他任何事情发生,那么循环中就没有其他事件,所以就不需要睡眠了?@SultanOrazbayev你是对的。非常感谢你,只是为了澄清你关于
睡眠的评论,这只是在
jupyter lab
中运行它的一个问题,对吗?如果我在一个独立的脚本中运行这个脚本,没有其他事情发生,那么循环中就没有其他事件,所以就不需要睡觉了?@SultanOrazbayev你说得对。