模块和包.深入Celery之应用配置/独立模块配置实践
来源:互联网 发布:淘宝卖家免费打折软件 编辑:程序博客网 时间:2024/06/10 15:48
配置简介:
说明: Celery的配置文件非常强大,支持在应用上设置,也可以使用一个独立的配置模块,具体需要调整的默认选项可通过http://docs.jinkan.org/docs/celery/configuration.html#configuration 获取.
# 方式一 : 直接在应用上设置,通过app.conf.update可一次性设置多个选项,常用于小型项目
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/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来加载配置对象或模块,常用于中型项目
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/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
1
2
3
4
5
6
7
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来加载配置对象或模块,常用于大型项目
1
2
3
4
5
6
7
8
9
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下为通知类的任务执行单元包,里面可以定义多个 不同方式的通知.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/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'
)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/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
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/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之Beat触发定时/周期性任务
- Python-模块和包.深入Celery之子任务及原语组式/链式/回调
- celery深入配置
- Struts 之旅 - 配置多应用模块
- python模块学习之模块和包
- Struts配置多应用模块
- luci 之CBI模块应用和包 (package.seeal)
- ESQL之刷新模块配置
- celery配置多队列实践笔记
- Nginx----模块、流程和配置
- Nginx的配置与部署(13)应用模块之Memcached模块+Proxy_Cache双层缓存模式
- celery的配置和使用
- Spring配置之DAO模块配置示例
- 模块独立
- Nginx的配置与部署(11)应用模块之Memcached模块的两大应用场景
- vs2008 the operation could not be completed. 未指定的错误
- Spring--->IOC(DI)使用方式
- 微信支付网络监控工具部署指引
- java中的多态
- 源码编译rrdtool提示找不到xxx.pc类问题处理
- 模块和包.深入Celery之应用配置/独立模块配置实践
- 避免主线程访问网络操作UI以及解析XMLDemo
- 目录
- Eclipse在高分辨率下图标变小的解决方法
- python自然语言处理之加载本地语料库
- 协议tcp/http常见问题&知识点
- 直连sde出错解决方案——通过创建sde文件连接
- java发送http的get、post请求工具类
- cogs739. [网络流24题] 运输问题