0

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

我对 Python / web dev 还是很陌生,所以我不太确定如何完成这个。

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

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

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

@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 上的 Worker 服务器,或者是否有另一种更便宜的方法来执行此操作?

4

2 回答 2

5

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

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

你还应该看看celerypython-rq

于 2013-08-25T15:55:44.197 回答
0

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

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

当然,您的代码是错误的,因为一旦return您终止了该函数的代码执行,您就进入了。

于 2013-08-25T15:42:02.230 回答