用芹菜做模型层



需求

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

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

发起人相信我可以启动一个任务,让其中一个工作人员将数据移入/移出Mongo,并得到结果。

到目前为止我的研究

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

另一种方法是将REST API修改为进行异步调用(立即返回任务ID,并在客户端继续轮询结果。就我个人而言,我讨厌这种想法,对于毫秒范围内的任务,如基本的CRUD操作,这看起来很傻。

问题

有没有一种优雅的方式来包装task.delay,使其看起来像一个同步调用,并且仍然由其中一个工作人员执行任务?

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

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

等待任务就绪,然后返回其结果。

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

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

相关内容

  • 没有找到相关文章

最新更新