基礎入門_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的參數必須是配置文件的絕對導入名稱.


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