Python 让芹菜回归未来
我正在使用tornado web框架。是否可以让芹菜任务返回类的对象,以便在@gen.coroutine修饰的处理程序中使用它 我想做的是: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
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(),而前一个是byyield
。然而,龙卷风中的芹菜把它们混在了一起。