首页 > 学院 > 开发设计 > 正文

模块和包.深入Celery之应用配置/独立模块配置实践

2019-11-08 01:25:35
字体:
来源:转载
供稿:网友

配置简介:


说明: Celery的配置文件非常强大,支持在应用上设置,也可以使用一个独立的配置模块,具体需要调整的默认选项可通过http://docs.jinkan.org/docs/celery/configuration.html#configuration 获取.

# 方式一 : 直接在应用上设置,通过app.conf.update可一次性设置多个选项,常用于小型项目


1234567891011121314151617181920212223242526272829#!/usr/bin/env python# -*- coding: utf-8 -*-# @Date    : 2016-12-23 20:15:32# @Author  : 李满满 (xmdevops@vip.QQ.com)# @Link    : http://xmdevops.blog.51cto.com/# @Version : $Id$# 说明: 导入公共模块from celery import Celery# 说明: 导入其它模块app = Celery(__name__)app.conf.update(    # 使用RabbitMQ作为消息代理    BROKER_URL='amqp://root:qwertyuiop@10.2.5.51:5672//',    # 使用Redis作为结果存储    CELERY_RESULT_BACKEND='redis://10.2.5.51:5123/0',    # 使用Msgpack作为有效载荷序列化方案    CELERY_TASK_SERIALIZER='msgpack',    # 使用可读性好的Json作为结果最终存储    CELERY_RESULT_SERIALIZER='json',    # 设置任务过期时间为1天    CELERY_TASK_RESULT_EXPIRES=60 * 60 * 24,    # 指定接受的内容类型    CELERY_ACCEPT_COUNT=['json''msgpack']    # 子进程长时间处理任务可能内存泄漏,设置执行多少任务就死掉重生    CELERYD_MAX_TASKS_PER_CHILD = 40)@app.taskdef add(x, y):    return + y

说明: 将如上代码保存为app.py,然后打开命令行执行celery worker -A app -l info,查看运行情况即可.

# 方式二 : 采用独立模块设置,通过app.config_from_object来加载配置对象或模块,常用于中型项目


123456789101112131415#!/usr/bin/env python# -*- coding: utf-8 -*-# @Date    : 2016-12-24 09:28:46# @Author  : 李满满 (xmdevops@vip.qq.com)# @Link    : http://xmdevops.blog.51cto.com/# @Version : $Id$from __future__ import absolute_import# 说明: 导入公共模块from celery import Celery# 说明: 导入其它模块app = Celery(__name__)app.config_from_object('config')@app.taskdef add(x, y):    return + y

1234567BROKER_URL = 'amqp://root:qwertyuiop@10.2.5.51:5672//'CELERY_RESULT_BACKEND = 'redis://10.2.5.51:5123/0'CELERY_TASK_SERIALIZER = 'msgpack'CELERY_RESULT_SERIALIZER = 'json' CELERY_TASK_RESULT_EXPIRES = 60 * 60 * 24 CELERY_ACCEPT_CONTENT = ['json''msgpack']CELERYD_MAX_TASKS_PER_CHILD = 40

说明: 将如上第一部分代码保存为app.py,第二部分代码保存到同级目录为config.py,然后打开命令行执行celery worker -A app -l info,查看运行情况即可.

# 方式三: 采用独立模块设置,且应用作为一个包存在,通过app.config_from_object来加载配置对象或模块,常用于大型项目


123456789C:/USERS/ADMINISTRATOR/DESKTOP/PROJ/WORK│  app.py│  prod_config.py│  test_config.py│  __init__.py└─notify        email.py        __init__.py

说明: 如上结构为常用的包形式应用,app.py为Celery应用的入口文件,主要用于初始化Celery以及加载配置,test_config.py为测试环境配置文件,主要用于测试环境中覆盖生产环境,prod_config.py为正式环境配置,主要用于正式环境配置,__init__.py让work作为一个包,notify下为通知类的任务执行单元包,里面可以定义多个 不同方式的通知.


1234567891011121314151617#!/usr/bin/env python# -*- coding: utf-8 -*-# @Date    : 2016-12-24 17:07:50# @Author  : 李满满 (xmdevops@vip.qq.com)# @Link    : http://xmdevops.blog.51cto.com/# @Version : $Id$from __future__ import absolute_import# 说明: 导入公共模块from celery import Celery# 说明: 导入其它模块app = Celery(    __name__,    include=[        'work.notify.email'    ])app.config_from_object('work.prod_config')

12345678910111213141516171819202122#!/usr/bin/env python# -*- coding: utf-8 -*-# @Date    : 2016-12-24 17:07:50# @Author  : 李满满 (xmdevops@vip.qq.com)# @Link    : http://xmdevops.blog.51cto.com/# @Version : $Id$from __future__ import absolute_import# 说明: 导入公共模块# 说明: 导入其它模块# 说明: 正式环境配置# BROKER_URL = 'amqp://root:qwertyuiop@10.2.5.51:5672//'# CELERY_RESULT_BACKEND = 'redis://10.2.5.51:5123/0'# CELERY_TASK_SERIALIZER = 'msgpack'# CELERY_RESULT_SERIALIZER = 'json'# CELERY_TASK_RESULT_EXPIRES = 60 * 60 * 24# CELERY_ACCEPT_CONTENT = ['json', 'msgpack']#  CELERYD_MAX_TASKS_PER_CHILD = 40# 说明: 测试环境配置try:    from .test_config import *except ImportError, _:    pass

12345678910111213141516#!/usr/bin/env python# -*- coding: utf-8 -*-# @Date    : 2016-12-24 17:32:54# @Author  : 李满满 (xmdevops@vip.qq.com)# @Link    : http://xmdevops.blog.51cto.com/# @Version : $Id$from __future__ import absolute_import# 说明: 导入公共模块# 说明: 导入其它模块BROKER_URL = 'amqp://root:qwertyuiop@10.2.5.51:5672//'CELERY_RESULT_BACKEND = 'redis://10.2.5.51:5123/0'CELERY_TASK_SERIALIZER = 'msgpack'CELERY_RESULT_SERIALIZER = 'json'CELERY_TASK_RESULT_EXPIRES = 60 * 60 * 24CELERY_ACCEPT_CONTENT = ['json''msgpack']CELERYD_MAX_TASKS_PER_CHILD = 40

12345678910111213#!/usr/bin/env python# -*- coding: utf-8 -*-# @Date    : 2016-12-24 17:07:50# @Author  : 李满满 (xmdevops@vip.qq.com)# @Link    : http://xmdevops.blog.51cto.com/# @Version : $Id$from __future__ import absolute_import# 说明: 导入公共模块# 说明: 导入其它模块from ..app import app@app.taskdef send_mail(usr, sub, msg):    return 'mail succ.'

说明: 将如上第一部分代码保存为app.py,第二部分代码保存为prod_config.py,第三部分代码保存为test_config.py,第四部分代码保存为email.py,然后打开命令行执行celery worker -A work.app -l info,查看运行情况即可,需要注意的是app.config_from_object的参数必须是配置文件的绝对导入名称.

登录乐搏学院官网http://www.learnbo.com/

或关注我们的官方微博微信,还有更多惊喜哦~

本文出自 “满满李 - 运维开发之路” 博客,请务必保留此出处http://xmdevops.blog.51cto.com/11144840/1885858


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表