基础入门_Python-模块和包.深入Celery之应用配置/独立模块配置实践?
2016-12-24 22:45
861 查看
配置简介:
说明: Celery的配置文件非常强大,支持在应用上设置,也可以使用一个独立的配置模块,具体需要调整的默认选项可通过http://docs.jinkan.org/docs/celery/configuration.html#configuration 获取.
# 方式一 : 直接在应用上设置,通过app.conf.update可一次性设置多个选项,常用于小型项目
# 方式二 : 采用独立模块设置,通过app.config_from_object来加载配置对象或模块,常用于中型项目
# 方式三: 采用独立模块设置,且应用作为一个包存在,通过app.config_from_object来加载配置对象或模块,常用于大型项目
说明: 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 : 李满满 (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.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 : 李满满 (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.task def add(x, y): return x + y
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说明: 将如上第一部分代码保存为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 : 李满满 (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')
#!/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
#!/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 * 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 : 李满满 (xmdevops@vip.qq.com) # @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的参数必须是配置文件的绝对导入名称.
相关文章推荐
- 模块和包.深入Celery之应用配置/独立模块配置实践
- 模块和包.深入Celery之应用配置/独立模块配置实践
- 基础入门_Python-模块和包.深入Celery之常用架构/方案选型/必知必会?
- 基础入门_Python-模块和包.深入Celery之节点管理/任务调度/任务追踪?
- 基础入门_Python-模块和包.深入Celery之子任务及原语组式/链式/回调?
- 基础入门_Python-模块和包.深入Celery之使用队列以及优先级提高响应?
- 基础入门_Python-模块和包.深入Celery之任务绑定/记录日志/自动重试?
- 基础入门_Python-模块和包.深入Celery之Beat触发定时/周期性任务?
- 基础入门_Python-模块和包.运维开发中__import__动态导入最佳实践?
- 基础入门_Python-模块和包.运维开发中inspect自省模块的最佳实践?
- 基础入门_Python-模块和包.运维开发中MySQLdb CRUD操作的最佳实践?
- 基础入门_Python-模块和包.深入SQLAlchemy之玩转各种增删查改操作?
- 基础入门_Python-模块和包.运维开发中内建模块getopt的最佳实践?
- 基础入门_Python-模块和包.深入SQLAlchemy之SQLAlchemy ORM重构表?
- 基础入门_Python-模块和包.运维开发中chartdet编码检测的最佳实践?
- 基础入门_Python-模块和包.深入SQLAlchemy之事务回滚与反射还原对象?
- 基础入门_Python-模块和包.运维开发中watchdog事件监视的最佳实践?
- 基础入门_Python-模块和包.运维开发中日志模块logging的最佳实践?
- 基础入门_Python-模块和包.深入SQLAlchemy之列级别约束与表级别约束?
- 基础入门_Python-模块和包.为wsgiref实现的WSGI服务器编写处理函数?