返回JSON后直接执行任务

时间:2013-08-25 15:38:19

标签: python json heroku flask

每当移动应用请求某些数据时,我都需要执行任务。用户不需要立即执行任务,但可能在接下来的2分钟内需要它。

我仍然是Python / web dev的新手,所以我不太清楚如何实现这一目标。

不希望用户等待执行任务,它可能需要30秒,但我还是要快30秒。

无论如何,我可以发送响应,以便用户立即获取所需信息,然后在发送JSON后立即执行任务。

是否可以在不使用返回的情况下向请求数据的移动应用程序发送响应,以便该方法可以继续执行用户无需等待的任务?

@app.route('/image/<image_id>/')
def images(image_id):
   # get the resource (unnecessary code removed)
   return Response(js, status=200, mimetype='application/json')
   # once the JSON response is returned, do some action
   # (what I would like to do somehow, but don't know how to get it to work

第二个想法也许我需要以某种方式异步执行此操作,因此它不会阻止路由器(但它仍然需要在返回JSON后立即完成)


更新 - 回应一些答案

对于我来说,执行这样的任务,是Heroku推荐的工作服务器/必须还是有其他更便宜的方法吗?

2 个答案:

答案 0 :(得分:5)

你可以创建第二个线程来完成额外的工作:

t = threading.Thread(target=some_function, args=[argument])
t.setDaemon(False)
t.start()

您还应该查看celerypython-rq

答案 1 :(得分:0)

是的,您需要一个任务队列。有几种选择。

看看另一个问题:uWSGI for uploading and processing files

当然,你的代码是错误的,因为一旦你return终止代码执行了你所在的那个函数。