1、Configuration
Celery,作为一个consumer工具不需要太多的操作。它有输入和输出通道,通过输入通道连接到broker(如AMQP服务Channel)或者通过输出通道连接到结果的backend(用于获取结果,不是必须的,因为有的操作只是单向分发任务)。 这一些控制通过制定一些配置参数来完成。
缺省的配置对大多数使用场景已足够,但很多时候可能需要自己的设置。熟悉可配置的选项是一个好主意这里是参考:Configuration and defaults 。
配置可以在应用里直接设置或者通过配置模块(也是一个Python文件,而不是一个特殊的格式,真是一个好主意!)。 下面给出任务数据序列化的这个例子:CELERY_TASK_SERIALIZER
:
app.conf.CELERY_TASK_SERIALIZER = 'json'
如果要配置很多参数,使用update方法:
app.conf.update(
CELERY_TASK_SERIALIZER='json',
CELERY_ACCEPT_CONTENT=['json'], # Ignore other content
CELERY_RESULT_SERIALIZER='json',
CELERY_TIMEZONE='Europe/Oslo',
CELERY_ENABLE_UTC=True,)
2、使用配置文件
对于大的项目使用特定的配置模块是一好主意,尤其是对于周期性的任务或者任务路由等参数,不建议使用硬编码的方法。而且最好将配置文件保存在一个中心存储区域,以便于实施集中化的管理、迁移和部署,减少配置错误带来的问题。
告诉Celery的运行实例使用给定的配置文件,调用 app.config_from_object()
方法:
app.config_from_object('celeryconfig')
这个模块经常命名为“celeryconfig
”, 但是你可以使用任何其它的名字,因为这其实也是一个Python模块。
这个配置模块 celeryconfig.py
必须在Python可找到得的调用路径之中, 看起来像这个样子:
celeryconfig.py
:
BROKER_URL = 'amqp://'
CELERY_RESULT_BACKEND = 'amqp://'
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_ACCEPT_CONTENT=['json']
CELERY_TIMEZONE = 'Europe/Oslo'
CELERY_ENABLE_UTC = True
为了检验这个配置参数正确,没有语法错误,可以像下面这样import这个模块:
$ python -m celeryconfig
完整的配置参数参见: Configuration and defaults.
下面演示一下配置文件的强大能力,关于任务的路由, 把misbehaving放到特定的队列中去:
celeryconfig.py
:
CELERY_ROUTES = {
'tasks.add': 'low-priority',}
可以设置处理的频率,下面的方式限制每分钟只处理十个任务:
celeryconfig.py
:
CELERY_ANNOTATIONS = {
'tasks.add': {'rate_limit': '10/m'}}
如果使用RabbitMQ 或 Redis 作为broker, 这个rate limit也可以在运行时进行设置:
$ celery -A tasks control rate_limit tasks.add 10/m
worker@example.com: OK
new rate limit set successfully
关于任务的路由更多的信息看这里 Routing Tasks , 设置参数 CELERY_ANNOTATIONS
, 或者 Monitoring and Management Guide 查看关于远程控制命令的说明,可以监控到你的Worker正在干些什么事情。