Python-flask:如何重定向然后执行任务?

时间:2016-09-11 20:52:24

标签: python asynchronous flask

假设你有这些函数,其中某个函数需要一段时间才能完成。

def a():
    sleep(5)
    return True
@app.route('/')
def b():
    a()
    return flask.redirect("http://someurl.com")

你将如何获得相同的功能,但首先重定向,然后执行该功能?我正在使用Heroku,如果我能帮助它,我不想完全重构我的代码。

1 个答案:

答案 0 :(得分:0)

一旦你返回一个方法(在这种情况下重定向)它就会死掉,它无法继续运行任何代码。

唯一可行的方法是异步运行长任务。通常用于此目的的非常流行的框架是Celery。看看他们的tutorial here。这是一个super quick introduction用于烧瓶。

请注意,您需要为celery tu run运行一个名为消息代理的单独服务。您可以在之前链接的教程中找到有关它的详细信息,但我可以根据个人经验提供的快速解决方案和建议是使用默认配置设置Redis服务器,它将正常工作。

一旦运行完毕,您将首先使用以下内容定义任务:

@celery.task()
def a():
    sleep(5)
    return True

然后你将以这种方式触发任务:

def b():
    a.delay()
    return flask.redirect("http://someurl.com")

希望有助于您开始使用Celery。