跟踪另一个函数中函数的进度

时间:2016-06-05 13:23:34

标签: python http asynchronous flask

我有一个运行Flask的Python后端,它将有一个函数(或一些链接在一起的函数),它将运行几个AJAX调用并执行一些数据库操作。

这需要一段时间,因此在前端我希望定期轮询服务器并在进行时更新UI。概要可能是这样的:

app.route('/update', methods=['GET'])
def getUpdate():
    # return a response with the current status of the update

@app.route('/update', methods=['POST'])
def runUpdate():
    # asynchronously call update() and return status

def update():
    # perform ajax calls
    # update database
    # query database
    # ...

我考虑过WebSockets,但我不知道这是否会让UI变得有点过于复杂而无法在UI中进行简单的更新。我知道我也可以使用模块范围的变量或将状态存储在数据库表中,但其中任何一种对我来说都是糟糕的设计。我可以使用一个简单的模式来实现这个目标吗?

1 个答案:

答案 0 :(得分:1)

使用数据库存储状态。如果您使用像redis这样的东西,您甚至可以使用pub / sub和websockets实时完成。

模块范围的变量是一个糟糕的选择。它不会扩展。

如果是长时间运行的任务,请考虑使用任务队列,例如rqcelery