zoukankan      html  css  js  c++  java
  • ubuntu 环境 celery配置全解

    继续尝试没有时间弄明白的技术。

    celery官方文档地址:http://docs.celeryproject.org/en/stable/getting-started/introduction.html#get-started。

    IBM描述参考地址:http://www.ibm.com/developerworks/cn/opensource/os-cn-celery-web-service/index.html?ca=drs-&utm_source=tuicool&utm_medium=referral#authorN10015

    简单的说,可以理解celery是帮助你把一些指定的工作异步化,不用等待io的工具。

    比如要发十条短信,需要10秒。如果线性操作,就得等待到短信全部发送完毕之后,再开始执行下面的代码,如果中间某一个死了,你的用户就会呆呆的等待,直到操作超时,这种体验是非常糟糕。如果再amazon买过书都知道,当你在付款完毕之后,马上跳转回来去看你的支付结果,这个时候可能状态还并未做刷新。因为你的付款操作钱虽然打出去了,实际上还在轮流排队支付,这个时候你可以出去刷个微博,然后再回来看你的付款情况,多半都已经会显示支付完毕了这就是异步的好处。

    而celery就是为了解决这种问题存在的。

    以前一直无法理解这种系统存在的意义和中间人broker扮演的关系。实际上,celery自己就是一个队列系统,但是同时她又无法将存储在队列的消息通知任何人,她需要一个中间人帮忙做这个事情,redis,rabbitmq就做了这个消息传递的中间人。所以处理流程是这样,当我们生产了一个消息,celery将消息放入队列并且中间人redis拿到消息之后将消息拿给空闲的worker进行处理。当我们产生一个异步消息的时候,就是把这个处理放到队列中去排队,最后由worker进行执行。而放这个消息的人并不会等待,会直接返回。而这边消息队列的消息处理完毕之后会以回调的形式回传给发送消息的人。当然这个回调同样有两种方式,用rpc存数据库什么的都是可以的。

    这篇文章的重点并不在如何使用上,而是在记录配置上面,关于如何具体使用的流程,IBM那哥们的文章写得非常清楚。

    首先在ubuntu上

    pip install celery # 安装celery

    然后安装redis的python客户端

    pip install redis # 安装redis客户端

    然后在ubuntu服务器上安装redis数据库

    apt-get install redis

    然后开始配置celery运行。这里我使用celery的默认配置来跑celery以简化步骤

    首先创建一个tasks.py的python脚本,这个脚本里 带着一个会被发送到celery执行的异步任务函数。

    from celery import Celery
    
    app = Celery('tasks', broker='redis://localhost')
    
    @app.task
    def hello():
        return 'hello world'

    这里注意,如果你的redis是用密码的 broker的格式就会是这样

    app = Celery('tasks', broker='redis://:password@localhost')

    不然会连接失败。

    然后使用一个worker监视这个任务是否被调用。

    celery -A tasks worker

    -A是指明app名字的意思。

    这个时候成功会出现这样的情况

    当你看到celery@xxxx ready的时候 就是你的监控woker启动起来了。这个界面是woker的一个控制台。

    之后可以写一个调用生产消息。这里我重新写一个脚本并且调用上面的hello函数。

    from tasks import add
    
    def notify(a, b):
        result = add.delay(a, b)
        return result
    
    if __name__ == '__main__':
        print notify(6, 7)

    这里调用的add.delay(a, b)会返回一个task的唯一id,如果我们设了backend  那么我们可以拿着这个返回的唯一id异步取得这个值。

    这个将在下篇文章详细介绍。

  • 相关阅读:
    教你50招提升ASP.NET性能(二十一):避免使用会话状态
    教你50招提升ASP.NET性能(二十):7条便利的ViewState技巧
    教你50招提升ASP.NET性能(二十):认识你的循环
    教你50招提升ASP.NET性能(十九):静态集合
    教你50招提升ASP.NET性能(十八):在处理网站性能问题前,首先验证问题是否出在客户端
    教你50招提升ASP.NET性能(十七):不要认为问题只会从业务层产生
    教你50招提升ASP.NET性能(十六):把问题仍给硬件而不是开发人员
    教你50招提升ASP.NET性能(十五):解决性能问题时不要低估UI的价值
    教你50招提升ASP.NET性能(十四):使用startMode属性来减少ASP.NET站点加载时间
    Chrome谷歌浏览器书签排序后,重启浏览器导致排序无效的问题(完美解决)
  • 原文地址:https://www.cnblogs.com/piperck/p/5385238.html
Copyright © 2011-2022 走看看