ps:百度是xxx的走狗
回到正题,今天研究了下用一个py文件作为celery的配置文件,所以,还是参考昨天的例子:http://my.oschina.net/hochikong/blog/396079
我们把celery.py的配置项拿出来,在proj目录中创建celeryconfig.py,内容如下:
CELERY_TASK_RESULT_EXPIRES=3600 CELERY_TASK_SERIALIZER=‘json‘ CELERY_ACCEPT_CONTENT=[‘json‘] CELERY_RESULT_SERIALIZER=‘json‘
修改celery.py:
from __future__ import absolute_import from celery import Celery app = Celery(‘proj‘, broker=‘amqp://[email protected]//‘, backend=‘amqp://[email protected]//‘, include=[‘proj.agent‘]) #app.conf.update( # CELERY_TASK_RESULT_EXPIRES=3600, # CELERY_TASK_SERIALIZER=‘json‘, # CELERY_ACCEPT_CONTENT=[‘json‘], # CELERY_RESULT_SERIALIZER=‘json‘ #) app.config_from_object(‘proj.celeryconfig‘) if __name__ == ‘__main__‘: app.start()
使用app.config_from_object()导入配置,注意需要以如下格式才能导入:path:module,celeryconfig文件要和celery文件在同一目录
启动一下:
[email protected]:~/celeryapp/configtest# celery -A proj worker -l info /usr/local/lib/python2.7/dist-packages/celery/platforms.py:766: RuntimeWarning: You are running the worker with superuser privileges, which is absolutely not recommended! Please specify a different user using the -u option. User information: uid=0 euid=0 gid=0 egid=0 uid=uid, euid=euid, gid=gid, egid=egid, -------------- [email protected] v3.1.17 (Cipater) ---- **** ----- --- * *** * -- Linux-3.13.0-24-generic-x86_64-with-Ubuntu-14.04-trusty -- * - **** --- - ** ---------- [config] - ** ---------- .> app: proj:0x7fade8bc1550 - ** ---------- .> transport: amqp://guest:**@localhost:5672// - ** ---------- .> results: amqp://[email protected]// - *** --- * --- .> concurrency: 1 (prefork) -- ******* ---- --- ***** ----- [queues] -------------- .> celery exchange=celery(direct) key=celery [tasks] . proj.agent.add . proj.agent.mul [2015-04-05 16:26:11,577: INFO/MainProcess] Connected to amqp://guest:**@127.0.0.1:5672// [2015-04-05 16:26:11,603: INFO/MainProcess] mingle: searching for neighbors [2015-04-05 16:26:12,622: INFO/MainProcess] mingle: all alone [2015-04-05 16:26:12,648: WARNING/MainProcess] [email protected] ready. ^C worker: Hitting Ctrl+C again will terminate all running tasks! worker: Warm shutdown (MainProcess)
启动成功了。
途中的碰壁经历:因为我一开始是直接把celery.py的配置内容复制过来,没有去掉配置内容间的逗号,像这样:
CELERY_TASK_RESULT_EXPIRES=3600, CELERY_TASK_SERIALIZER=‘json‘, CELERY_ACCEPT_CONTENT=[‘json‘], CELERY_RESULT_SERIALIZER=‘json‘
导致无法启动worker。后来看了看官方文档的example,才搞定了这一问题。只要去掉那些逗号即可。
反思:虽然celery还可以使用这种形式的配置:
from celery import Celery app = Celery() class Config: CELERY_ENABLE_UTC = True CELERY_TIMEZONE = ‘Europe/London‘ app.config_from_object(Config) # or using the fully qualified name of the object: # app.config_from_object(‘module:Config‘)
还可以使用app.config_from_envvar()来配置,但是我觉得我用的那种方式更加方便。而且把配置内容都放在一个单独文件中,避免修改源码。
SORA可能会使用app.conf.update的方式配合configparser对worker进行配置,一方面能避免用户直接和celery配置打交道,同时还能统一整个项目的配置方式(参考openstack的各种conf文件)
时间: 2024-11-19 05:46:57