Python Jupyter笔记本中的流式网格显示

Python Jupyter笔记本中的流式网格显示,python,pandas,jupyter-notebook,Python,Pandas,Jupyter Notebook,我试图在Jupyter的网格中显示来自redis pubsub频道的实时价格更新。每次有价格更新时,消息都会添加到网格的末尾。换句话说,gridview小部件将绑定到数据帧,因此每次它更改时,gridview都会更改。我们的想法是得到这样的东西: 我试图通过显示和清除输出来实现这一点。然而,我并没有得到一个更新到位的流媒体网格,而是显示和清除输出,这是非常烦人的 这是一个jupyter单元格中的输出小部件 import ipywidgets as iw from IPython.display

我试图在Jupyter的网格中显示来自redis pubsub频道的实时价格更新。每次有价格更新时,消息都会添加到网格的末尾。换句话说,gridview小部件将绑定到数据帧,因此每次它更改时,gridview都会更改。我们的想法是得到这样的东西:

我试图通过显示和清除输出来实现这一点。然而,我并没有得到一个更新到位的流媒体网格,而是显示和清除输出,这是非常烦人的

这是一个jupyter单元格中的输出小部件

import ipywidgets as iw
from IPython.display import display 

o = iw.Output()
def output_to_widget(df, output_widget): 
    output_widget.clear_output()
    with output_widget: 
        display(df)
o
下面是订阅redis并获取消息句柄的代码

import redis, json, time

r = redis.StrictRedis(host = HOST, password = PASS, port = PORT, db = DB)
p = r.pubsub(ignore_subscribe_messages=True)
p.subscribe('QUOTES')

mdf = pd.DataFrame()
while True:
    message = p.get_message()
    if message:
        json_msg = json.loads(message['data'])
        df = pd.DataFrame([json_msg]).set_index('sym')
        mdf = mdf.append(df)
        output_to_widget(mdf, o)
    time.sleep(0.001)

尝试将第一行output\u改为output\u widget。clear\u outputwait=True


我能够使用streamz库中的流式数据帧使其工作

下面是将数据发送到流化数据帧的类

class DataEmitter:
def __init__(self, pubsub, src):
    self.pubsub = pubsub
    self.src = src
    self.thread = None

def emit_data(self, channel):
    self.pubsub.subscribe(**{channel: self._handler})
    self.thread = self.pubsub.run_in_thread(sleep_time=0.001)

def stop(self):
    self.pubsub.unsubscribe()
    self.thread.stop()    

def _handler(self, message):
    json_msg = json.loads(message['data'])
    df = pd.DataFrame([json_msg])
    self.src.emit(df)
这是显示流数据帧的单元格

r = redis.StrictRedis(host = HOST, password = PASS, port = PORT, db = DB)
p = r.pubsub(ignore_subscribe_messages=True)
source = Stream()
emitter = DataEmitter(p, source, COLUMNS)
emitter.emit_data(src='PRICE_UPDATES')

#sample for how the dataframe it's going to look like
example = pd.DataFrame({'time': [], 'sym': []})
sdf = source.to_dataframe(example=example)
sdf

你好不是一个具体的答案,但这里可能有一些线索。我问了一个关于IPyWidgets的问题,得到了写IPyWidgets的人的回复!!这里有一些关于更合适、更具互动性的绘图库的提示和建议。谢谢你的回答。这有点帮助,但是网格仍然闪烁