python - 如何在使用 MongoDB 更改拉取新数据时实时更新图表?
问题描述
此代码有效,但同一个文档被多次返回。应该发生的是 x 轴上的 [1,2,3,...] 和 y 轴上的 [1,2,3,4, .....] 的数组被绘制出来。但是,Y 有时返回为 [1,0,0,1,1,2,3,3,4,5,5,5,]。我该怎么做才能解决这个问题?此代码有效,但同一个文档被多次返回。应该发生的是 x 轴上的 [1,2,3,...] 和 y 轴上的 [1,2,3,4, .....] 的数组被绘制出来。但是,Y 有时返回为 [1,0,0,1,1,2,3,3,4,5,5,5,]。我该怎么做才能解决这个问题?
import dash
from dash.dependencies import Output, Event
import dash_core_components as dcc
import dash_html_components as html
import plotly
import random
from plotly import graph_objs
from collections import deque # Define max size
import pymongo
import constants
import logging
from collections import OrderedDict
client = pymongo.MongoClient(constants.MONGODB_CONN)
X = []
Y = []
X.append(1)
Y.append(1)
count = 0
resume_token = 'NEW'
token_holder = []
stream = client.changestream.collection.watch()
app = dash.Dash(__name__)
app.layout = html.Div([
dcc.Graph(id='live-graph', animate=True),
dcc.Interval(
id='graph-update',
interval=1000
)
])
@app.callback(Output('live-graph', 'figure'),
events=[Event('graph-update', 'interval')])
def update_graph():
global stream
global token_holder
global X
global Y
global client
global resume_token
if resume_token is "NEW":
print('NEW DONE NEW DONE NEW DONE NEW DONE')
for insert_change in stream:
resume_token = stream.resume_token
# print('Working 3')
# print(change['fullDocument']['hello'])
# print('Working 4')
print('') # for readability only
X.append(X[-1] + 1)
Y.append(insert_change['fullDocument']['hello'])
print(insert_change['fullDocument']['hello'])
print(X)
# print(Y)
# token_holder.append(resume_token)
data = graph_objs.Scatter(
x=list(X),
y=list(Y),
name='Scatter',
mode='markers'
)
return {'data': [data], 'layout': graph_objs.Layout(xaxis=dict(range=[min(X), max(X)]),
yaxis=dict(range=[min(Y), max(Y)]))}
else:
for insert_change in stream:
# token_holder.append(resume_token)
# print('Working 3')
# print(change['fullDocument']['hello'])
# print('Working 4')
# print('') # for readability only
X.append(X[-1] + 1)
Y.append(insert_change['fullDocument']['hello'])
print(insert_change['fullDocument']['hello'])
print(X)
print(Y)
if resume_token in token_holder:
resume_token = stream.resume_token
token_holder.append(resume_token)
data = graph_objs.Scatter(
x=list(X),
y=list(Y),
name='Scatter',
mode='markers'
)
return {'data': [data], 'layout': graph_objs.Layout(xaxis=dict(range=[min(X), max(X)]),
yaxis=dict(range=[min(Y), max(Y)]))}
if __name__ == "__main__":
app.run_server(debug=True)
解决方案
推荐阅读
- python - 如何为使用的 EventStream 创建一个模拟,但 S3 Select API 用于基于 S3 Select 查询获取内容?
- java - 当 Rserve 启用 TLS 时,Java Rconnection 挂起
- windows - Windows 10 使用什么 Mechanisum 来检测程序中的相似性以在任务栏上对它们进行分组
- python - 代码在网站上找不到任何产品
- r - 在文本文件文件夹上使用带有换行符的正则表达式进行替换
- java - 使用 okhttp3 调用的测试方法
- javascript - 如何使用 localhost 在本地运行 Visual Studio Code?
- javascript - 使用带有预定义数组的 react-infinite-scroll-component
- java - 当靠近目标 Vector2 时,Actor 会抖动
- python - 如何从 Eclipse pydev 中在 pydevd.py 上设置主机