基础入门_Python-模块和包.深入Celery之应用配置/独立模块配置实践?

配置简介:


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


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


#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Date    : 2016-12-23 20:15:32
# @Author  : 李满满 ([email protected])
# @Link    : http://xmdevops.blog.51cto.com/
# @Version : $Id$
# 说明: 导入公共模块
from celery import Celery
# 说明: 导入其它模块
app = Celery(__name__)
app.conf.update(
    # 使用RabbitMQ作为消息代理
    BROKER_URL='amqp://root:[email protected]: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.task
def add(x, y):
    return x + y

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


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


#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Date    : 2016-12-24 09:28:46
# @Author  : 李满满 ([email protected])
# @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.task
def add(x, y):
    return x + y

BROKER_URL = 'amqp://root:[email protected]: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来加载配置对象或模块,常用于大型项目


C:\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下为通知类的任务执行单元包,里面可以定义多个 不同方式的通知.


#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Date    : 2016-12-24 17:07:50
# @Author  : 李满满 ([email protected])
# @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')

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Date    : 2016-12-24 17:07:50
# @Author  : 李满满 ([email protected])
# @Link    : http://xmdevops.blog.51cto.com/
# @Version : $Id$
from __future__ import absolute_import
# 说明: 导入公共模块
# 说明: 导入其它模块
# 说明: 正式环境配置
# BROKER_URL = 'amqp://root:[email protected]: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

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Date    : 2016-12-24 17:32:54
# @Author  : 李满满 ([email protected])
# @Link    : http://xmdevops.blog.51cto.com/
# @Version : $Id$
from __future__ import absolute_import
# 说明: 导入公共模块
# 说明: 导入其它模块
BROKER_URL = 'amqp://root:[email protected]: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

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Date    : 2016-12-24 17:07:50
# @Author  : 李满满 ([email protected])
# @Link    : http://xmdevops.blog.51cto.com/
# @Version : $Id$
from __future__ import absolute_import
# 说明: 导入公共模块
# 说明: 导入其它模块
from ..app import app
@app.task
def 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的参数必须是配置文件的绝对导入名称.


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章