ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python-使芹菜返回未来

2019-11-21 18:07:48  阅读:308  来源: 互联网

标签:celery tornado 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版本是龙卷风芹菜提供了最简单的方法来尽可能接近您想要的行为.

标签:celery,tornado,python
来源: https://codeday.me/bug/20191121/2053752.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有