跳转到主要内容

Cadasta Worker Toolbox

项目描述

PyPI version Build Status Requirements Status

一组辅助工具,用于快速构建Cadasta系统的异步工作进程。

cadasta.workertoolbox.conf.Config

Config类旨在简化配置Celery设置,以确保所有工作进程都遵守Cadasta异步系统的架构要求。它本质上提供了Celery默认配置与我们系统所需配置之间的差异。该类的目标是尽量减少开发者的自定义,但在更改环境之间的配置时(例如,如果开发设置与生产设置差异很大)可能需要一些自定义。

任何Celery配置项都可以通过关键字参数或环境变量提交。通过关键字参数提交的参数应遵循Celery的新式小写设置,而不是旧式的大写设置。通过环境变量提供的参数应该是大写,并且需要以前缀CELERY_开头(例如,为了设置task_track_started值,应设置环境变量CELERY_TASK_TRACK_STARTED)。前缀可以通过提供的ENV_PREFIX关键字参数或CELERY_ENV_PREFIX环境变量进行自定义。如果为某个设置提供了关键字参数和环境变量,则关键字参数具有优先权。具有非字符串默认值的设置将使用`ast.literal_eval <https://docs.pythonlang.cn/3/library/ast.html#ast.literal_eval>`__对环境变量值进行运行,支持Python原生类型如booltuple。在调用Conf实例的repr时,只显示小写设置。

一旦应用,所有设置(以及内部变量)都将在Celery app实例的app.conf对象中可用。

提供的配置

以下是由Config类提供给Celery实例的配置。

result_backend

默认为'db+postgresql://{0.RESULT_DB_USER}:{0.RESULT_DB_PASS}@{0.RESULT_DB_HOST}/{0.RESULT_DB_NAME}',由self渲染。

broker_transport

默认为'sqs'

broker_transport_options

默认为

{
    'region': 'us-west-2',
    'queue_name_prefix': '{}-'.format(QUEUE_NAME_PREFIX)
}
task_queues

默认为以下set中的kombu.Queue对象,其中queues是配置的内部QUEUES变量,而exchange是从task_default_exchangetask_default_exchange_type设置构建的kombu.Exchange对象。

set([
    Queue('celery', exchange, routing_key='celery'),
    Queue(platform_queue, exchange, routing_key='#'),
] + [
    Queue(q_name, exchange, routing_key=q_name)
    for q_name in queues
])

注意:建议开发人员不要更改此设置。

task_routes

默认为一个函数,该函数将生成一个字典,其中routing_key与任务名点分隔的第一个索引的值匹配,而exchange设置为从task_default_exchangetask_default_exchange_type设置构建的kombu.Exchange对象。

注意:建议开发人员不要更改此设置。

task_default_exchange

默认为'task_exchange'

task_default_exchange_type

默认为'topic'

task_track_started

默认为True

内部变量

以下是可以用于自定义上述提供的配置的参数和环境变量。按照惯例,用于构建Celery配置的所有变量都应全部大写。除非另有说明,所有变量都可以通过参数或环境变量(优先考虑参数)指定。

QUEUES

该段落应包含Cadasta平台使用的所有与服务相关的队列名称数组。这些值用于构建 task_queues 配置。为了后续任务的路由,确保每个任务消费者了解所有可用的队列非常重要。因此,如果某个队列被任何服务工作者使用,则它应包含在此数组中。不需要包含 'celery''platform.fifo' 队列。默认值为模块 `__init__.py 文件 </cadasta/workertoolbox/__init__.py>` 中的 DEFAULT_QUEUES 变量内容。

PLATFORM_QUEUE_NAME

默认为 'platform.fifo'

注意:建议开发人员不要更改此设置。

CHORD_UNLOCK_MAX_RETRIES

用于设置 celery.chord_unlock 任务在放弃之前可以重试的最大次数。参见 celery/celery#2725。默认为 43200(这意味着在6小时后放弃,假设任务的 default_retry_delay 默认设置为1秒)。

SETUP_FILE_LOGGING

控制是否将默认日志配置应用于应用程序。至少包括以下内容

  • 创建一个控制台日志处理器,用于记录 INFO 级别的日志

  • 一个文件日志处理器,用于记录 INFO 级别的日志,并保存到 app.info.log

  • 一个文件日志处理器,用于记录 ERROR 级别的日志,并保存到 app.error.log

注意:这可能对调试有用,但在生产环境中,建议简单地记录到 stdout(如Celery的默认设置)

SETUP_SENTRY_LOGGING

如果设置了所有必需的环境变量,则默认为 True,否则为 False。控制是否设置 Sentry 日志处理器。需要 SENTRY_DSN 环境变量才能自动设置Sentry日志。如果满足此条件,将设置以下内容

QUEUE_PREFIX

用于填充连接的 broker_transport_optionsqueue_name_prefix 值。默认为 'dev'

RESULT_DB_USER

用于填充默认 result_backend 模板。默认为 'cadasta'

RESULT_DB_PASS

用于填充默认 result_backend 模板。默认为 'cadasta'

RESULT_DB_HOST

用于填充默认 result_backend 模板。默认为 'localhost'

RESULT_DB_PORT

用于填充默认 result_backend 模板。默认为 'cadasta'

RESULT_DB_NAME

用于填充默认 result_backend 模板。默认 '5432'

cadasta.workertoolbox.setup.setup_app

在提供配置对象给Celery应用程序之后,还需要执行其他设置步骤以正确配置应用程序。例如,配置中描述的交换机和队列必须声明。此函数调用这些必需的后续程序。通常,它由 `worker_init <http://docs.celeryproject.org/en/latest/userguide/signals.html#worker-init>`__ 信号自动调用,但对于仅作为任务生产者运行的代码库或Python壳内部的代码,必须手动调用。

它接受两个参数

  • app - 一个 Celery() 应用程序实例。 必需

  • throw - 一个布尔值,指定是否在设置失败时引发错误。否则,错误将简单地记录到模块日志器在 exception 级别。 可选,默认:True

cadasta.workertoolbox.tests.build_functional_tests

当提供Celery应用程序实例时,此函数生成一系列功能测试,以确保提供的应用程序配置和功能符合Cadasta异步系统的架构。

以下是一个示例,其中在并行 celery 模块中存在一个实例化和配置过的 Celery() 应用实例。

from cadasta.workertoolbox.tests import build_functional_tests

from .celery import app

FunctionalTests = build_functional_tests(app)

要运行这些测试,请使用您的标准测试运行器(例如 pytest)或在命令行中手动调用。

python -m unittest path/to/tests.py

贡献

测试

pip install -e .
pip install -r requirements-test.txt
./runtests

部署

pip install -r requirements-deploy.txt
python setup.py test clean build tag publish

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面