SORA中celery原生配置文件的示例分析

15次阅读
没有评论

这篇文章主要介绍 SORA 中 celery 原生配置文件的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

我们把 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.
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 文件)

以上是“SORA 中 celery 原生配置文件的示例分析”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注丸趣 TV 行业资讯频道!