#SORA#celery原生配置文件研究

161711_33P3_987833.jpg

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://guest@localhost//',
             backend='amqp://guest@loaclhost//',
             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文件在同一目录


启动一下:

root@workgroup0:~/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,
 
 -------------- celery@workgroup0 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://guest@loaclhost//
- *** --- * --- .> 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] celery@workgroup0 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文件)


转载于:https://my.oschina.net/hochikong/blog/396291

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值