我想在dash中构建一个web应用程序,在用户输入的数据上执行一个计算开销很大的任务,并以表格格式返回结果。在前端,我有一个 Jmeter 板回调,它根据 Jmeter 板组件的输入更新 Jmeter 板组件,例如:
from rq import Queue
from worker import conn
import time
# redis connection to execute tasks in the background
q = Queue(connection=conn,job_timeout='3m')
@app.callback(
[Output('table-columns', 'columns'),
Output('table-columns', 'data'),],
[Input('upload', 'contents'),
Input('launch-expensive-job-button', 'n_clicks')],
)
def expensive_task(contents, n_clicks_launch):
df = q.enqueue(expensive_function, contents).result
while df is None:
time.sleep(2)
return [{"name": i, "id": i} for i in df.columns], df.to_dict("rows")
我使用redis队列在后台运行任务。一旦df变量中的结果被更新(在处理过程中redis约定为result none),我就将其返回给客户机。问题是我的部署平台不允许前端作业运行太长时间。因此,即使我将作业发送到后端,我也必须找到一种方法使dash应用程序侦听变量df的任何更新。
我确信这个解决方案是可行的,但我是一个新手,找不到它。很高兴有人指出一些文件,我可以找到我的方式。
1条答案
按热度按时间klh5stk11#
我想你在找
Interval
组件(此处为文档)。它会定期触发客户端更新,例如每秒一次。回拨应该是这样的,