配置簡介:
說明: 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的參數必須是配置文件的絕對導入名稱.