我正在尝试为我的python程序构建一个基于web的用户界面。为此,我希望将dataFrameFinal的实时更新发送到html页面,但是每次提交表单时,我只能从Flask发送一次更新。你知道吗
目前在我的主.py我有这个功能
@app.route('/process', methods=['POST'])
def process():
# gets the number of sims from the form on submit
numSims = int(request.form['numSims'])
dataFrameFinal = runSims(num_sims=numSims)
return jsonify({'dataframe' : dataFrameFinal .reset_index().to_html()})
这将得到表单提交时的sim数(numSims),并在所有模拟运行到javascript文件后返回表,javascript文件将结果加载到html页面。你知道吗
然而,由于我正在运行超过10000个sims(运行可能需要10分钟以上),我希望发送dataFrameFinal的实时版本(例如每10个sims发送一次html页面的更新)。如果您能给我一些建议,我将不胜感激。你知道吗
抱歉,如果这是一个基本的问题,我对这个非常新,找不到任何其他类似的职位,所以我想我会问。提前谢谢。你知道吗
使用任务管理器
Celery是一个广泛使用的选项,尽管还有其他选项。你知道吗
使用芹菜可以从视图函数启动异步(或后台)任务/进程。然后,您的视图可以向用户返回一个响应(这样用户就不必等待所有的处理完成之后才能看到响应)。你知道吗
芹菜需要一个消息代理来启动任务并返回结果。(More details.)您还可以使用此代理存储进度更新。你知道吗
例如,如果您正在使用Redis,当
runSims()
处理了100个sim时,您可以在Redis中存储类似processed: 100
的内容。然后,您可以编写一个Flask view函数从Redis中读取这个值并将其返回给用户。实时更新页面的一个选项是在页面上有一些Javascript,每秒调用Flask view函数。Flask view函数将读取Redis中当前存储的任何数字(您的芹菜任务/进程应该更新该数字),并将其返回到Javascript,以便更新页面上的某些字段。你知道吗您的流程函数最终将如下所示:
您的
get_progress()
函数可能如下所示:相关问题 更多 >
编程相关推荐