python-使芹菜返回未来

我正在使用龙卷风Web框架.是否可以使celery任务返回Future类的对象,以便在@ gen.coroutine装饰的处理程序中使用它?

我正在尝试做以下事情:

    class TornadoRequestHandler(BaseHandler):

         @gen.coroutine
         def get(self):
              result = yield celery_task.apply_aync()
              self.write(result)
              self.finish()

我已经看过tornado-celery,但这并不是我想要达到的目标.

解决方法:

据我所知,唯一的方法是通过龙卷风芹菜,这将使您做到这一点:

class TornadoRequestHandler(BaseHandler):

     @gen.coroutine
     def get(self):
          result = yield gen.Task(celery_task.apply_aync)
          self.write(result)
          self.finish()

原因是使用gen.coroutine时想要的行为依赖于它调用的所有异步方法来获取回调kwarg,该回调在方法完成时被调用. celery_task.apply_async不接受回调kwarg,因此gen.coroutine不能直接使用.似乎龙卷风芹菜通过利用apply_async确实接受** options参数这一事实而起作用,该参数可以是任意任意kwarg.这意味着apply_async实际上将接受回调kwarg,但只需忽略它即可.龙卷风celery通过在Celery中重写负责发布任务的类,并更改发布过程以发布您的任务,然后从要发布的结果队列中使用到任务完成为止,来利用这一点.使用代码执行通常被忽略的回调kwarg提供的功能,并提取**选项.

我不确定这个解释是否清楚,但是tl; dr版本是龙卷风芹菜提供了最简单的方法来尽可能接近您想要的行为.

上一篇:芹菜工人不填补并发插槽


下一篇:特定于队列的芹菜事件