使用芹菜作为模型层

时间:2014-03-05 15:13:54

标签: python angularjs mongodb flask celery

要求

我收到了一个不寻常的要求:必须使用芹菜与数据库层进行通信。

应用程序在后端使用Flask和MongoDB,在前端使用Angular。

赞助商认为我可以解雇任务,让其中一名工作人员将数据移入/移出Mongo并获得结果。

到目前为止我的研究

据我所知,如果我同步调用芹菜任务(使用__call__apply),则任务在本地执行而不是发送到数据库;如果我异步调用它,我必须阻止Flask端并继续轮询任务队列,直到我得到结果或错误。

另一种方法是修改REST API以进行异步调用(立即返回任务ID并在客户端继续轮询结果。我个人憎恶这个想法,这对于像毫米基本CRUD这样的毫秒级任务看起来很愚蠢操作

问题

是否有一种优雅的方法来包装task.delay,以使其看起来像一个同步调用,并且还有一个工作人员执行的任务?

1 个答案:

答案 0 :(得分:0)

是的,有 - 不知道我在文档中错过AsyncResult.get

AsyncResult.get(timeout=None, propagate=True, interval=0.5)
  

等到任务准备就绪,然后返回结果。

所以你只需要调用这样的任务:

task.delay(args).get(timeout=1)