初次使用

配置

Celery 像家用电器一样,不需要任何配置,开箱即用。

它有一个输入和输出,输入端必须连接中间人(Broker),输出端可以连接到结果后端。

如果仔细观察一些家用电器,会发现有很多到按钮,这就是配置。

大多数情况下,使用默认的配置就可以满足,也可以按需配置。

查看配置选项可以更加的熟悉 Celery 的配置信息

可以参考 配置和默认配置:Configuration and defaults 章节阅读 Celery 的配置。

可以直接在程序中进行配置,也可以通过配置模块进行专门配置。

例如

  • 通过 task_serializer 选项可以指定序列化的方式: app.conf.task_serializer = 'json'

  • 如果需要配置多个选项,可以通过 upate 进行添加配置:

py app.conf.update( task_serializer='json', accept_content=['json'], # Ignore other content result_serializer='json', timezone='Europe/Oslo', enable_utc=True, )

针对大型的项目,建议使用专用配置模块,进行针对 Celery 配置。

  1. 不建议使用硬编码,建议将所有的配置项集中化配置。
  2. 集中化配置可以像系统管理员一样,当系统发生故障时可针对其进行微调。
  3. 可以通过 app.config_from_object() 进行加载配置模块: app.config_from_object('celeryconfig')

其中 celeryconfig 为配置模块的名称,这个是可以自定义修改的、

celeryconfig.py

  • 在上面的实例中,需要在同级目录下创建一个名为 celeryconfig.py 的文件,添加以下内容:

```py broker_url = 'pyamqp://' result_backend = 'rpc://'

task_serializer = 'json' result_serializer = 'json' accept_content = ['json'] timezone = 'Europe/Oslo' enable_utc = True ```

  • 可以通过以下命令来进行验证配置模块是否配置正确

$ python -m celeryconfig

有关实例的默认配置,详情参考 配置和默认配置:Configuration and defaults

  • Celery 也可以设置任务执行错误时的专用队列中,这只是配置模块中一小部分,详细配置如下:

py task_routes = { 'tasks.add': 'low-priority', }

  • Celery 也可以针对任务进行限速,以下为每分钟内允许执行的 10 个任务的配置:

py task_annotations = { 'tasks.add': {'rate_limit': '10/m'} }

  • 如果使用的是 RabbitMQRedis 的话,可以在运行时进行设置任务的速率:

$ celery -A tasks control rate_limit tasks.add 10/m worker@example.com: OK new rate limit set successfully