python - Dash中的redis:达到最大递归级别
问题描述
我正在 Python 3.7 中构建 Dash 应用程序。具体来说,我想使用 redis 来预先计算整个图形,但得到一个错误“达到最大递归级别”。
我遵循官方 Dash 教程 ( https://dash.plot.ly/sharing-data-between-callbacks )的“示例 4”、“第 6 部分,在回调之间共享数据” 。但是,与该示例相反,我想预先计算的不是一些数据,而是整个图形。那是因为我收到了大型数据集——随着时间的推移的气象数据——由于它们的大小而加载非常缓慢,因此我想到了预先计算这个数字。无论如何,我可以在没有预计算部分的情况下构建应用程序,但是尝试修改它会从 Dash 引擎的深处抛出错误消息。
import os, sys, uuid
import dash_core_components as dcc
import dash_html_components as html
import dash
import plotly
from flask_caching import Cache
import pandas
import numpy
sys.setrecursionlimit(500000) # doesn't help!
N = 50000 # big number
# start Dash application
app = dash.Dash(__name__)
cache = Cache(app.server, config={
'CACHE_TYPE': 'redis',
'CACHE_DIR': 'cache-directory',
'CACHE_REDIS_URL': os.environ.get('REDIS_URL', 'redis://localhost:6379'),
'CACHE_THRESHOLD': 10
})
def get_dataframe(session_id):
@cache.memoize()
def query_and_serialize_data(session_id):
prep = pandas.DataFrame({
'data': [plotly.graph_objs.Scattergl(
x=[index for index in range(0, N)], # time index
y=numpy.random.rand(N), # data points
mode='lines+markers'
)]
})
return prep.to_json()
return pandas.read_json(query_and_serialize_data(session_id))
def serve_layout():
session_id = str(uuid.uuid4())
return html.Div([
# hidden
html.Div(session_id, id='session-id', style={'display': 'none'}),
# graph
html.Div([dcc.Graph(id='graph')])
])
app.layout = serve_layout
# update graph
@app.callback(
dash.dependencies.Output('graph', 'figure'),
[dash.dependencies.Input('session-id', 'children')])
def update_graph_figure(session_id):
#data = [plotly.graph_objs.Scattergl(
# x=[index for index in range(0, N)], # time index
# y=numpy.random.rand(N), # data points
# mode='lines+markers'
#)] # valid data to 'graph'
prep = get_dataframe(session_id)
return {'data': prep['data']}
# main program
if __name__ == '__main__':
app.run_server(debug=True)
错误消息遵循长调用列表:
回溯(最后一次调用):
文件“C:\ProgramData\Anaconda3\lib\site-packages\flask\app.py”,第 2309 行,调用中 返回 self.wsgi_app(environ, start_response)
...
文件“C :\ProgramData\Anaconda3\lib\site-packages\pandas\io\json\json.py”,第 161 行,在 _write iso_dates,default_handler)
文件“C:\ProgramData\Anaconda3\lib\site-packages\pandas\io \json\json.py",第 115 行,在 _write default_handler=default_handler
OverflowError: 达到最大递归级别
我应该如何更正代码?如果这个想法不起作用,我怎样才能以其他方式加快加载时间?
解决方案
推荐阅读
- android - 如何从 Galaxy Tab A 的无法启动的 Android 操作系统中转储闪存
- javascript - 循环用于...非序列数
- perl - Perl:曾经工作的一行脚本的“修改只读值”
- ruby-on-rails - 从 select 语句中更改列的值
- python - 你如何获得嵌套循环中的数字?
- graph-algorithm - 最短路径树 (SPT) 中的最优根
- c# - 如何获取 .Net Core Web Api 默认模板的 Azure ActiveDirectory 令牌?
- xamarin.forms - 标签 TextProperty CoerceValue 委托未调用
- c++ - 问答程序在发布版本时崩溃,在调试版本中运行良好
- azure - 将 SSIS 包部署到 azure 时出错