Python 让芹菜回归未来

Python 让芹菜回归未来,python,celery,tornado,Python,Celery,Tornado,我正在使用tornado web框架。是否可以让芹菜任务返回类的对象,以便在@gen.coroutine修饰的处理程序中使用它 我想做的是: class TornadoRequestHandler(BaseHandler): @gen.coroutine def get(self): result = yield celery_task.apply_aync() self.write(resul

我正在使用tornado web框架。是否可以让芹菜任务返回类的对象,以便在@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
时所需的行为依赖于它调用的所有异步方法来执行
回调
kwarg,该回调在方法完成时被调用<代码>芹菜任务。应用异步不接受
回调
kwarg,因此
gen.coroutine
不能直接使用。它看起来像是利用了
apply_async
确实采用了
**options
参数这一事实,而
tornado芹菜
可以是任意Kwarg。这意味着
apply\u async
实际上将接受
回调
kwarg,但忽略它<代码>tornado芹菜通过重写芹菜中负责发布任务的类来利用这一点,并将发布过程更改为发布任务,然后在任务完成时从发布到的结果队列中使用。消费代码执行通常被忽略的
回调
kwarg提供的函数,并将其拉出
**选项


我不确定这个解释有多清楚,但是tl;dr版本是tornado芹菜提供了尽可能接近您想要的行为的最简单方法。

嗨,dano!谢谢你的回答。我也这么认为:),tornado芹菜是一个不错的库,但现在我通过在执行器中运行芹菜任务,使用等待任务完成的调用函数来解决它。这是一个很小的代码,它与tornado标准工具一起工作。
gen
和芹菜的
apply\u async
的结果概念是完全不同的,一个是在ioloop中的未来,另一个是在任务队列中的未来。后一个应该是result.get(),而前一个是by
yield
。然而,龙卷风中的芹菜把它们混在了一起。