并行Python框架Celery的配置方法

原创
2015/05/28 08:34
阅读数 9.7K
AI总结

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正在干些什么事情。


展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
3 收藏
0
分享
AI总结
返回顶部
顶部