模块和包.深入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 + 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 + 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的参数必须是配置文件的绝对导入名称.

 

原文转自:乐搏学院http://www.learnbo.com/

阅读全文
0 0
原创粉丝点击