这篇文章主要介绍 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 行业资讯频道!