让芹菜回归未来



我使用的是龙卷风web框架。是否可以让一个芹菜任务返回Future类的对象,以便在@gen.coroutine修饰的处理程序中使用它?

我想做的是:

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

我见过龙卷风芹菜,但这并不是我想要达到的目标。

据我所知,唯一的方法是通过龙卷风芹菜,它可以让你做到这一点:

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

原因是,使用gen.coroutine时所需的行为依赖于它调用的所有异步方法来获取callback kwarg,该方法在方法完成时被调用。celery_task.apply_async不使用callback,因此gen.coroutine不能直接使用。看起来tornado-celery的工作原理是利用apply_async确实采用了**options参数这一事实,该参数可以是任意的夸尔格。这意味着apply_async实际上会接受callback kwarg,但只是忽略它。tornado-celery利用了这一点,重写了Celery中负责发布任务的类,并更改了发布过程以发布任务,然后在任务完成时从发布的结果队列中消耗。消费代码执行由通常被忽略的callbackkwarg提供的函数,它取出**options

我不确定这个解释有多清楚,但tl;dr-version是龙卷风芹菜提供了一种最简单的方式来尽可能接近你想要的行为。

相关内容

  • 没有找到相关文章

最新更新