基础入门_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‘]
)
@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‘]


说明: 将如上第一部分代码保存为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‘]
# 说明: 测试环境配置
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‘]

#!/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的参数必须是配置文件的绝对导入名称.

时间: 2024-12-27 22:57:19

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

基础入门_Python-模块和包.深入Celery之常用架构/方案选型/必知必会?

简单介绍: 说明: 此模块是一个专注于分布式消息传递的异步任务队列,所谓任务就是消息,消息中的有效载荷中包含要执行的任务需要的全部数据 几大特性: 1. Celery易于使用和维护,且不需要配置文件,默认配置启动时自动写入消息代理. 2. Celery高可用,连接丢失或失败时客户端或消费者会自动重试,并且可通过消息代理的双主/主从模式来提高高可用性 3. Celery快速,单个进程每分钟可处理百万任务,且优化后可保持往返延迟在亚毫秒级别 4. Celery灵活,几乎所有部分都支持扩展或单独使用,

基础入门_Python-模块和包.深入Celery之使用队列以及优先级提高响应?

多个队列: 1. Celery默认使用的队列名为celery默认绑定在direct交换机celery,可通过CELERY_DEFAULT_QUEUE/CELERY_DEFAULT_EXCHANGE/CELERY_DEFAULT_ROUTING_KEY等参数配置修改. #!/usr/bin/env python # -*- coding: utf-8 -*- # @Date    : 2016-12-24 17:32:54 # @Author  : 李满满 ([email protected])

基础入门_Python-模块和包.运维开发中__import__动态导入最佳实践?

常规导入: import module_name[,module1,...]  from module_name import [*|child[,child1,...] from module_name import [*|child[,child1,...] as alias_name 注意: 导入语句可出现在程序任意位置,自定义包要实现from module_name import *的效果则此模块必须在__init__.py实现__all__ = ['module_1', 'module

基础入门_Python-模块和包.深入Celery之Beat触发定时/周期性任务?

任务调度: 1. Celery默认任务单元由任务生产者触发,但有时可能需要其自动触发,而Beat进程正是负责此类任务,能够自动触发定时/周期性任务. #!/usr/bin/env python # -*- coding: utf-8 -*- # @Date    : 2016-12-24 17:32:54 # @Author  : 李满满 ([email protected]) # @Link    : http://xmdevops.blog.51cto.com/ # @Version : $

基础入门_Python-模块和包.深入Celery之节点管理/任务调度/任务追踪?

任务管理: 说明: 如上为运行任务后的标准输出,transport为消息代理,concurrency为默认进程池进程数,当所有子进程处于忙碌状态时必须等待空闲子进程处理,如果是IO密集型可尝试使用Eventlet/Gevent协程,具体可参考http://docs.jinkan.org/docs/celery/userguide/concurrency/index.html#concurrency,result为结果存储,queue为所有的队列以及交换机信息列表 参数 含义 %p 节点全名,如[

基础入门_Python-模块和包.运维开发中inspect自省模块的最佳实践?

简单介绍: 说明: 此模块提供了一系列自省函数,可获取模块/类/方法/函数/traceback/帧对象/代码对象的信息 快速安装: 内置模块 测试相关: inspect.ismodule(object) -> True/False 说明: 判断object是否为模块 inspect.isclass(object) -> True/False 说明: 判断object是否为类 inspect.ismethod(object) -> True/False 说明: 判断object是否为方法

基础入门_Python-模块和包.运维开发中内建模块getopt的最佳实践?

简单介绍: 此模块提供命令行选项解析,目前支持短格式和长格式选项 快速安装: 说明:  内建模块无需安装 解析方法: getopt(args, shortopts, longopts = []) -> (opts, args) 说明: args为要解析的参数序列,常为sys.argv[1:],shortopts为单字符选项定义串,如果某个选项需要一个参数,响应字母后面必须有一个冒号,longopts为长格式的选项名序列,可以包含多个字符,序列元素必须包含--前缀,如果此长选项需要参数则其名应包含

基础入门_Python-模块和包.运维开发中日志模块logging的最佳实践?

简单介绍: 说明: 此模块儿提供了文件,HTTP GET/POST,SMTP,SOCKET等方式实现日志记录,甚至可以自动实现具体的日志记录方式 快速安装: pip install --upgrade logging 处理流程: 日志级别: 属性名称 属性说明 logging.NOTSET 默认为0 logging.DEBUG 调试为10 logging.INFO 一般为20 logging.WARN 警告为30 logging.ERROR 错误为40 logging.CRITICAL 严重为5

基础入门_Python-模块和包.运维开发中watchdog事件监视的最佳实践?

简单介绍: 说明:  此模块是一个跨平台的PY库和SHELL工具,可以监视文件系统事件(增加/删除/修改) 快速安装: pip install --upgrade watchdog 日志记录: event_handler = LoggingEventHandler() -> event_handler 说明: 创建一个日志处理句柄,其实LoggingEventHandler是继承自FileSystemEventHandler类,只是重写了增删查改的回调函数,直接调用logging模块写到对应lo