美文网首页
django + celery 入门级总结

django + celery 入门级总结

作者: 第八共同体 | 来源:发表于2017-09-26 13:41 被阅读0次

    环境: system: windows 10
    python: python2.7

    1.RabbitMQ/Redis安装

    由于想使用RabbitMQ做消息代理,Redis做结果存储。所以在网上查看安装教程,进行了安装。

    1.1 redis安装

    redis下载地址
    下载完成直接安装即可,配置环境变量,将redis-cli.exe等可用命令所在的目录加入的path系统变量里面,方便我们以后再终端下直接使用命令。
    测试安装

    安装成功.png

    1.2 下载安装RabbitMQ

    由于安装RabbitMQ,会检测系统上是否安装了Erlang,所以如果系统未安装,就要先安装Erlang,然后再安装RabbitMQ。
    Erlang下载地址
    下载后安装,安装成功后配置环境变量

    必须配置.png
    RabbitMQ下载地址,安装也很简单。
    安装完成后,打开RabbitMQ命令行终端(开始菜单里有)
    image.png
    直接执行./rabbitmq-plugins enable rabbitmq_management可以开启web管理。
    访问http://192.168.9.102:15672/(本地地址+15672端口号)
    用户名密码默认都是guest,如果你想增加用户,后者修改密码,都可以在命令行中执行相关命令:
    rabbitmqctl change_password userName newPassword 修改密码
    rabbitmqctl.bat add_user username password 新增用户
    rabbitmqctl.bat list_users 查看用户及角色
    rabbitmqctl.bat set_user_tags username administrator 修改用户角色
    rabbitmqctl.bat delete_user username 删除用户 浏览器管理页面.png

    2.celery安装

    pip install celery==3.1.25
    由于刚开始直接pip install "celery[librabbitmq,redis,msgpack]",安装的celery是4.x的版本,在windows上运行,总是报错,后来在官网上看到了解释

    image.png

    3.新建一个django工程

    比如我的目录结构


    image.png

    3.1celeryconfig.py文件内容(参考豆瓣大神的资料)

    BROKER_URL = 'amqp://guest@localhost//' # 使用RabbitMQ作为消息代理
    CELERY_RESULT_BACKEND = 'redis://localhost:6379/0' # 把任务结果存在了Redis
    CELERY_TASK_SERIALIZER = 'msgpack' # 任务序列化和反序列化使用msgpack方案
    CELERY_RESULT_SERIALIZER = 'json' # 读取任务结果一般性能要求不高,所以使用了可读性更好的JSON
    CELERY_TASK_RESULT_EXPIRES = 60 * 60 * 24 # 任务过期时间,不建议直接写86400,应该让这样的magic数字表述更明显
    CELERY_ACCEPT_CONTENT = ['json', 'msgpack'] # 指定接受的内容类型
    

    3.2 celery_app.py

    from celery import Celery
    app = Celery('celery_demo', include=['celery_demo.tasks'])
    
    app.config_from_object('celery_demo.celeryconfig')
    
    
    if __name__ == '__main__':
        app.start()
    

    3.3 task.py

    from celery_demo.celery_app import app
    @app.task
    def add(x, y):
        return x + y
    
    

    3.4 test.py

    from celery_demo.tasks import add
    
    
    if __name__ == '__main__':
        rlt = add.delay(1, 2)
        print rlt, type(rlt)
        print rlt.get(), rlt.status
    

    启动celery:celery -A celery_demo worker --app=celery_demo.celery_app:app -l info

    image.png

    运行测试脚本,然后可以看到返回的结果

    72c0456d-cc6b-4621-9575-85bbbaa7707b <class 'celery.result.AsyncResult'>
    3 SUCCESS
    
    image.png

    4,常遇问题总结

    4.1 ImportError: cannot import name Celery

    这个问题遇到的不下三次,常说人不能在一个坑了栽倒三次,我是栽太多次了,所以记下来,方便以后再次遇到时,有可行的解决方案

    标记处为解决方法.png

    加上标记处的参数即可。

    相关文章

      网友评论

          本文标题:django + celery 入门级总结

          本文链接:https://www.haomeiwen.com/subject/niesextx.html