如何执行长时间请求

0 投票
1 回答
1476 浏览
提问于 2025-04-17 16:03

我正在做一个图形界面(gui)或者仪表盘的项目,用户可以通过这个界面输入信息。当用户点击提交按钮后,我会收集他们的反馈,然后在后台启动一个任务。

我希望实现的效果是:当用户点击提交时,后台的长时间任务正在处理的时候,我能显示一条消息,比如:“您的任务已成功提交”。然后等这个任务完成后,我再刷新页面,把用户带到新的页面。

这是我在route.py文件中的一段代码:

@app.route('/',methods=['POST'])
def get_data():
    data = request.form
    for data_tuple in data:

            requests_to_gb[data_tuple] = data[data_tuple]
    flag = execute_request(requests_to_gb) <---Fires a job

    if flag:
        flash("Your request has been submitted")

    else:
        flash("request could not be completed!")
    return render_template('request_submitted.html')

但是问题是,我执行请求的那一行代码(execute_request())处理起来很慢,所有的操作都会在这期间暂停,直到它完成。这种情况下我该怎么处理呢?还有,怎么才能自动刷新到新页面呢?

1 个回答

3

可以使用celery,这是一种分布式任务队列。你可以参考快速入门指南来开始使用。

简单来说,它可以把一些任务交给后台的工作程序去处理,这样就不会影响到你主要的用户界面(这正是你想要避免的情况)。

好消息是,它和flask(或者django,甚至其他任何框架)结合起来非常简单,因为它是用Python写的。

撰写回答