Plotly dash 用户依赖的服务器端缓存
Plotly dash user dependent server side caching
我在我的 dash
应用程序中使用服务器端缓存,并且我在 documentation 中遵循示例 4。我正在使用它来查询和处理“全局”数据,然后在应用程序的不同组件之间共享这个准备好的数据集。
我正在尝试调整示例,以便缓存也依赖于某些用户输入并重新加载。
我已经尝试过像下面这样的东西,但实际上没有意义 - 实现我所追求的目标的最佳方法是什么?
app = dash.Dash(__name__)
cache = Cache(app.server, config={
'CACHE_TYPE': 'redis',
'CACHE_TYPE': 'filesystem',
'CACHE_DIR': 'cache-directory',
'CACHE_THRESHOLD': 200
})
def get_dataframe(session_id, user_input_value):
@cache.memoize()
def query_and_serialize_data(session_id):
df = # Here I make my query based on user_input_value
# If there is no input I just return an empty df
return df.to_json()
return pd.read_json(query_and_serialize_data(session_id))
def serve_layout():
session_id = str(uuid.uuid4())
return html.Div([
html.Div(session_id, id='session-id', style={'display': 'none'}),
# User input
# My output which doesn't behave as expected
])
app.layout = serve_layout
# Callback related to the user input
@app.callback(
[
Output('my-output', 'output-component')
],
[
Input('session-id', 'children'),
Input('user-input', 'value')
]
)
def generate_output(session_id, user_input_value):
df = get_dataframe(session_id, user_input_value)
return # Output component
if __name__ == '__main__':
app.run_server(debug=True)
在您发布的代码中,user_input_value
值永远不会到达记忆函数。如果您更改代码以使其能够正常工作,即将 user_input_value
传递给 query_and_serialize_data
函数,它应该会按预期工作
def get_dataframe(session_id, user_input_value):
@cache.memoize()
def query_and_serialize_data(session_id, user_input_value):
df = # Here I make my query based on user_input_value
# If there is no input I just return an empty df
return df.to_json()
return pd.read_json(query_and_serialize_data(session_id, user_input_value))
我在我的 dash
应用程序中使用服务器端缓存,并且我在 documentation 中遵循示例 4。我正在使用它来查询和处理“全局”数据,然后在应用程序的不同组件之间共享这个准备好的数据集。
我正在尝试调整示例,以便缓存也依赖于某些用户输入并重新加载。
我已经尝试过像下面这样的东西,但实际上没有意义 - 实现我所追求的目标的最佳方法是什么?
app = dash.Dash(__name__)
cache = Cache(app.server, config={
'CACHE_TYPE': 'redis',
'CACHE_TYPE': 'filesystem',
'CACHE_DIR': 'cache-directory',
'CACHE_THRESHOLD': 200
})
def get_dataframe(session_id, user_input_value):
@cache.memoize()
def query_and_serialize_data(session_id):
df = # Here I make my query based on user_input_value
# If there is no input I just return an empty df
return df.to_json()
return pd.read_json(query_and_serialize_data(session_id))
def serve_layout():
session_id = str(uuid.uuid4())
return html.Div([
html.Div(session_id, id='session-id', style={'display': 'none'}),
# User input
# My output which doesn't behave as expected
])
app.layout = serve_layout
# Callback related to the user input
@app.callback(
[
Output('my-output', 'output-component')
],
[
Input('session-id', 'children'),
Input('user-input', 'value')
]
)
def generate_output(session_id, user_input_value):
df = get_dataframe(session_id, user_input_value)
return # Output component
if __name__ == '__main__':
app.run_server(debug=True)
在您发布的代码中,user_input_value
值永远不会到达记忆函数。如果您更改代码以使其能够正常工作,即将 user_input_value
传递给 query_and_serialize_data
函数,它应该会按预期工作
def get_dataframe(session_id, user_input_value):
@cache.memoize()
def query_and_serialize_data(session_id, user_input_value):
df = # Here I make my query based on user_input_value
# If there is no input I just return an empty df
return df.to_json()
return pd.read_json(query_and_serialize_data(session_id, user_input_value))