Конфигурация и значения по умолчанию
В этом документе описаны доступные параметры конфигурации.
Если вы используете загрузчик по умолчанию, необходимо создать модуль celeryconfig.py и убедиться, что он доступен в пути Python.
Это пример файла конфигурации, который поможет вам начать работу. Он должен содержать всё необходимое для базовой настройки Celery.
## Broker settings.
broker_url = 'amqp://guest:guest@localhost:5672//'
# List of modules to import when the Celery worker starts.
imports = ('myapp.tasks',)
## Using the database to store task state and results.
result_backend = 'db+sqlite:///results.db'
task_annotations = {'tasks.add': {'rate_limit': '10/s'}}
В версии 4.0 появились новые настройки в нижнем регистре и новая организация настроек.
Основное отличие от предыдущих версий, помимо имён в нижнем регистре, заключается в переименовании некоторых префиксов, например celery_beat_ в beat_, celeryd_ в worker_, а также в переносе большинства настроек верхнего уровня celery_ в новый префикс task_.
Предупреждение
Celery сможет читать файлы конфигурации старого формата до версии 6.0. После этого поддержка файлов конфигурации старого формата будет удалена. Мы предоставляем команду celery upgrade, которая должна обрабатывать множество случаев (в том числе Django).
Пожалуйста, как можно скорее перейдите на новую схему конфигурации.
accept_content
По умолчанию: {'json'} (множество, список или кортеж).
Список разрешённых типов содержимого/сериализаторов.
Если получено сообщение, которого нет в этом списке, оно будет отброшено с ошибкой.
По умолчанию включён только json, но можно добавить любой тип содержимого, в том числе pickle и yaml. В этом случае убедитесь, что у недоверенных сторон нет доступа к брокеру. Подробнее см. в разделе Безопасность.
Пример:
# using serializer name
accept_content = ['json']
# or the actual content-type (MIME)
accept_content = ['application/json']
result_accept_content
По умолчанию: None (множество, список или кортеж).
Добавлено в версии 4.3.
Список разрешённых типов содержимого/сериализаторов для бэкенда результатов.
Если получено сообщение, которого нет в этом списке, оно будет отброшено с ошибкой.
По умолчанию используется тот же сериализатор, что и в accept_content. Однако для принимаемого содержимого бэкенда результатов можно указать другой сериализатор. Обычно это требуется, если используется подписывание сообщений, а результат хранится в бэкенде результатов без подписи. Подробнее см. в разделе Безопасность.
Пример:
# using serializer name
result_accept_content = ['json']
# or the actual content-type (MIME)
result_accept_content = ['application/json']
enable_utc
Добавлено в версии 2.5.
По умолчанию: включено, начиная с версии 3.0.
Если параметр включён, даты и время в сообщениях будут преобразованы в часовой пояс UTC.
Обратите внимание: рабочие процессы под управлением версий Celery ниже 2.5 будут считать, что во всех сообщениях используется местный часовой пояс, поэтому включайте параметр, только если все рабочие процессы обновлены.
timezone
Добавлено в версии 2.5.
По умолчанию: "UTC".
Настройка Celery для использования пользовательского часового пояса. Значением timezone может быть любой часовой пояс, поддерживаемый библиотекой ZoneInfo.
Если параметр не задан, используется часовой пояс UTC. Для обратной совместимости также предусмотрен параметр enable_utc; если установить его в false, вместо этого будет использоваться местный часовой пояс системы.
task_annotations
Добавлено в версии 2.5.
По умолчанию: None.
Этот параметр позволяет переопределять любые атрибуты задач из конфигурации. Значением может быть словарь или список объектов аннотаций, которые отбирают задачи и возвращают набор атрибутов для изменения.
Это изменит атрибут rate_limit для задачи tasks.add:
task_annotations = {'tasks.add': {'rate_limit': '10/s'}}
или изменит его для всех задач:
task_annotations = {'*': {'rate_limit': '10/s'}}
Можно изменять и методы, например обработчик on_failure:
def my_on_failure(self, exc, task_id, args, kwargs, einfo):
print('Oh no! Task failed: {0!r}'.format(exc))
task_annotations = {'*': {'on_failure': my_on_failure}}
Если нужна большая гибкость, вместо словаря можно использовать объекты, чтобы выбирать задачи для аннотирования:
class MyAnnotate:
def annotate(self, task):
if task.name.startswith('tasks.'):
return {'rate_limit': '10/s'}
task_annotations = (MyAnnotate(), {other,})
task_compression
По умолчанию: None
Сжатие по умолчанию для сообщений задач. Может быть gzip, bzip2 (если доступно) или любой пользовательской схемой сжатия, зарегистрированной в реестре сжатия Kombu.
По умолчанию сообщения отправляются без сжатия.
task_protocol
По умолчанию: 2 (начиная с версии 4.0).
Задаёт используемую по умолчанию версию протокола сообщений задач. Поддерживаются протоколы 1 и 2.
Протокол 2 поддерживается в версиях 3.1.24 и 4.x+.
task_serializer
По умолчанию: "json" (начиная с версии 4.0, ранее — pickle).
Строка, задающая используемый по умолчанию метод сериализации. Допустимые значения: json (по умолчанию), pickle, yaml, msgpack или любой пользовательский метод сериализации, зарегистрированный с помощью kombu.serialization.registry.
См. также
task_publish_retry
Добавлено в версии 2.2.
По умолчанию: включено.
Определяет, будут ли повторяться попытки публикации сообщений задач при потере соединения или других ошибках соединения. См. также task_publish_retry_policy.
task_publish_retry_policy
Добавлено в версии 2.2.
По умолчанию: см. раздел Повторные попытки отправки сообщений.
Задаёт политику по умолчанию для повторных попыток публикации сообщения задачи при потере соединения или других ошибках соединения.
task_always_eager
По умолчанию: отключено.
Если значение равно True, все задачи будут выполняться локально, с блокировкой до завершения задачи. apply_async() и Task.delay() будут возвращать экземпляр EagerResult, имитирующий API и поведение AsyncResult, за исключением того, что результат уже вычислен.
То есть задачи будут выполняться локально, а не отправляться в очередь.
task_eager_propagates
По умолчанию: отключено.
Если значение равно True, исключения будут распространяться для задач, выполняемых немедленно (с помощью task.apply() или при включённом параметре task_always_eager).
Это равносильно тому, чтобы всегда запускать apply() с параметром throw=True.
task_store_eager_result
Добавлено в версии 5.1.
По умолчанию: отключено.
Если значение равно True, параметр task_always_eager имеет значение True, а task_ignore_result — False, результаты задач, выполняемых немедленно, будут сохранены в бэкенде.
По умолчанию результат не сохраняется даже при значении True для task_always_eager и значении False для task_ignore_result.
task_remote_tracebacks
По умолчанию: отключено.
Если параметр включён, результаты задач будут содержать стек вызовов рабочего процесса при повторном возбуждении ошибок задач.
Для этого необходима библиотека https://pypi.org/project/tblib/, которую можно установить с помощью pip:
$ pipinstallcelery[tblib]
Информацию об объединении требований нескольких расширений см. в разделе Пакеты.
task_ignore_result
По умолчанию: отключено.
Определяет, следует ли сохранять возвращаемые задачами значения (записи результатов). Если требуется сохранять ошибки, но не успешные возвращаемые значения, можно задать параметр task_store_errors_even_if_ignored.
task_store_errors_even_if_ignored
По умолчанию: отключено.
Если параметр задан, рабочий процесс сохраняет все ошибки задач в хранилище результатов, даже если включён Task.ignore_result.
task_track_started
По умолчанию: отключено.
Если значение True, при выполнении задачи рабочим процессом её состояние будет обозначаться как «started». По умолчанию используется значение False, поскольку обычно такой уровень детализации не нужен. Задачи либо ожидают выполнения, либо завершены, либо ожидают повторной попытки. Состояние «started» может быть полезно для длительных задач, когда необходимо сообщать, какая задача выполняется в данный момент.
task_time_limit
По умолчанию: без ограничения времени.
Жёсткий предел времени выполнения задачи в секундах. По его превышении рабочий процесс, выполняющий задачу, будет завершён и заменён новым.
task_allow_error_cb_on_chord_header
Добавлено в версии 5.3.
По умолчанию: отключено.
Включение этого флага позволит связать обработчик ошибок с заголовком chord, который по умолчанию не связывается при использовании link_error(), и предотвратит выполнение тела chord, если завершится с ошибкой любая задача в заголовке.
Рассмотрим следующую canvas-конструкцию с отключённым флагом (поведение по умолчанию):
header = group([t1, t2]) body = t3 c = chord(header, body) c.link_error(error_callback_sig)
Если завершилась с ошибкой любая задача заголовка (t1 или t2), тело chord (t3) по умолчанию не будет выполнено, а error_callback_sig будет вызван один раз (для тела).
Включение этого флага изменит описанное выше поведение следующим образом:
error_callback_sigбудет связан сt1иt2(а также сt3).Если завершилась с ошибкой любая задача заголовка,
error_callback_sigбудет вызван для каждой задачи заголовка, завершившейся с ошибкой, и дляbody(даже если тело не выполнялось).
Теперь рассмотрим следующую canvas-конструкцию с включённым флагом:
header = group([failingT1, failingT2]) body = t3 c = chord(header, body) c.link_error(error_callback_sig)
Если завершились с ошибкой все задачи заголовка (failingT1 и failingT2), тело chord (t3) не будет выполнено, а error_callback_sig будет вызван 3 раза (два раза для заголовка и один раз для тела).
Наконец, рассмотрим следующую canvas-конструкцию с включённым флагом:
header = group([failingT1, failingT2]) body = t3 upgraded_chord = chain(header, body) upgraded_chord.link_error(error_callback_sig)
Эта canvas-конструкция будет вести себя точно так же, как предыдущая, поскольку chain будет преобразован в chord внутри системы.
task_soft_time_limit
По умолчанию: без мягкого ограничения времени.
Мягкий предел времени выполнения задачи в секундах.
При его превышении будет возбуждено исключение SoftTimeLimitExceeded. Например, задача может перехватить его и выполнить очистку до наступления жёсткого ограничения времени:
from celery.exceptions import SoftTimeLimitExceeded
@app.task
def mytask():
try:
return do_work()
except SoftTimeLimitExceeded:
cleanup_in_a_hurry()
task_acks_late
По умолчанию: отключено.
При позднем подтверждении сообщения задач подтверждаются после выполнения задачи, а не непосредственно перед ним (поведение по умолчанию).
См. также
Часто задаваемые вопросы: Что использовать: retry или acks_late?.
task_acks_on_failure_or_timeout
По умолчанию: включено
Если параметр включён, сообщения всех задач будут подтверждаться, даже если задачи завершились с ошибкой или истекло время ожидания.
Этот параметр действует только для задач, сообщения которых подтверждаются после выполнения, и только если включён task_acks_late.
task_reject_on_worker_lost
По умолчанию: отключено.
Даже если включён параметр task_acks_late, рабочий процесс подтвердит задачи, если процесс, выполняющий их, неожиданно завершится или получит сигнал (например, KILL/INT и т. д.).
Если установить значение true, сообщение будет помещено обратно в очередь, чтобы задача была выполнена повторно тем же или другим рабочим процессом.
Предупреждение
Включение этого параметра может привести к зацикливанию сообщений; убедитесь, что понимаете последствия.
task_default_rate_limit
По умолчанию: без ограничения частоты.
Глобальное ограничение частоты выполнения задач по умолчанию.
Это значение используется для задач, у которых не задано собственное ограничение частоты.
См. также
Параметр worker_disable_rate_limits позволяет отключить все ограничения частоты.
result_backend
По умолчанию: бэкенд результатов не включён.
Бэкенд для хранения результатов задач (записей результатов). Возможны следующие варианты:
-
rpc-
Отправлять результаты обратно в виде сообщений AMQP. См. раздел Параметры бэкенда RPC.
-
database-
Использовать реляционную базу данных, поддерживаемую SQLAlchemy. См. раздел Параметры бэкенда базы данных.
-
redis-
Использовать Redis для хранения результатов. См. раздел Параметры бэкенда Redis.
-
cache-
Использовать Memcached для хранения результатов. См. раздел Параметры бэкенда кэша.
-
mongodb-
Использовать MongoDB для хранения результатов. См. раздел Параметры бэкенда MongoDB.
-
cassandra-
Использовать Cassandra для хранения результатов. См. раздел Параметры бэкенда Cassandra/AstraDB.
-
elasticsearch-
Использовать Elasticsearch для хранения результатов. См. раздел Параметры бэкенда Elasticsearch.
-
ironcache-
Использовать IronCache для хранения результатов. См. раздел Параметры бэкенда IronCache.
-
couchbase-
Использовать Couchbase для хранения результатов. См. раздел Параметры бэкенда Couchbase.
-
arangodb-
Использовать ArangoDB для хранения результатов. См. раздел Параметры бэкенда ArangoDB.
-
couchdb-
Использовать CouchDB для хранения результатов. См. раздел Параметры бэкенда CouchDB.
-
cosmosdbsql (experimental)-
Использовать PaaS-сервис CosmosDB для хранения результатов. См. раздел Параметры бэкенда CosmosDB (экспериментально).
-
filesystem-
Использовать общий каталог для хранения результатов. См. раздел Параметры файлового бэкенда.
-
consul-
Использовать хранилище K/V Consul для хранения результатов. См. раздел Параметры бэкенда хранилища K/V Consul.
-
azureblockblob-
Использовать PaaS-хранилище AzureBlockBlob для хранения результатов. См. раздел Параметры бэкенда Azure Block Blob.
-
s3-
Использовать S3 для хранения результатов. См. раздел Параметры бэкенда S3.
-
gcs-
Использовать GCS для хранения результатов. См. раздел Параметры бэкенда GCS.
result_backend_always_retry
По умолчанию: False
Если параметр включён, бэкенд будет повторять попытки при возникновении восстанавливаемых исключений, а не передавать исключение дальше. Между двумя попытками будет использоваться экспоненциально увеличивающаяся задержка.
result_backend_max_sleep_between_retries_ms
По умолчанию: 10000
Задаёт максимальное время ожидания между двумя повторными попытками операции с бэкендом.
result_backend_base_sleep_between_retries_ms
По умолчанию: 10
Задаёт базовое время ожидания между двумя повторными попытками операции с бэкендом.
result_backend_max_retries
По умолчанию: Inf
Максимальное количество повторных попыток при возникновении восстанавливаемых исключений.
result_backend_thread_safe
По умолчанию: False
Если значение True, объект бэкенда используется совместно потоками. Это может быть полезно, чтобы использовать общий пул соединений вместо создания соединения для каждого потока.
result_backend_transport_options
По умолчанию: {} (пустое отображение).
Словарь дополнительных параметров, передаваемых базовому транспортному механизму.
Сведения о поддерживаемых параметрах (если таковые имеются) см. в руководстве пользователя вашего транспортного механизма.
Пример настройки времени ожидания видимости (поддерживается транспортными механизмами Redis и SQS):
result_backend_transport_options = {'visibility_timeout': 18000} # 5 hours
result_serializer
По умолчанию: json, начиная с версии 4.0 (ранее — pickle).
Формат сериализации результатов.
Информацию о поддерживаемых форматах сериализации см. в разделе Сериализаторы.
result_compression
По умолчанию: без сжатия.
Необязательный метод сжатия результатов задач. Поддерживаются те же параметры, что и для настройки task_compression.
result_extended
По умолчанию: False
Включает запись расширенных атрибутов результатов задач (name, args, kwargs, worker, retries, queue, delivery_info) в бэкенд.
result_expires
По умолчанию: срок действия истекает через 1 день.
Время (в секундах или объект timedelta), по истечении которого сохранённые записи результатов задач будут удалены.
Встроенная периодическая задача удалит результаты по истечении этого времени (celery.backend_cleanup), если включён параметр celery beat. Задача запускается ежедневно в 4 утра.
Значение None или 0 означает, что срок действия результатов не истечёт (в зависимости от особенностей бэкенда).
Примечание
На данный момент это работает только с бэкендами AMQP, баз данных, кэша, Couchbase, файловой системы и Redis.
При использовании бэкенда базы данных или файловой системы для удаления результатов с истёкшим сроком действия должен выполняться celery beat.
result_cache_max
По умолчанию: отключено.
Включает кэширование результатов на стороне клиента.
Это может быть полезно для устаревшего, объявленного нерекомендуемым бэкенда «amqp», где результат становится недоступным после того, как его получит один экземпляр результата.
Общее количество результатов, кэшируемых до вытеснения более старых. Значение 0 или None означает отсутствие ограничения, а значение -1 отключает кэш.
По умолчанию отключено.
result_chord_join_timeout
По умолчанию: 3.0.
Время ожидания в секундах (int/float) при объединении результатов группы внутри chord.
result_chord_retry_interval
По умолчанию: 1.0.
Интервал по умолчанию для повторных попыток задач chord.
override_backends
По умолчанию: отключено.
Путь к классу, реализующему бэкенд.
Позволяет переопределить реализацию бэкенда. Это может быть полезно, если нужно сохранять дополнительные метаданные о выполненных задачах, переопределить политики повторных попыток и т. д.
Пример:
override_backends = {"db": "custom_module.backend.class"}
Примеры URL базы данных
Чтобы использовать бэкенд базы данных, задайте параметр result_backend, указав URL подключения с префиксом db+:
result_backend = 'db+scheme://user:password@host:port/dbname'
Примеры:
# sqlite (filename)
result_backend = 'db+sqlite:///results.sqlite'
# mysql
result_backend = 'db+mysql://scott:tiger@localhost/foo'
# postgresql
result_backend = 'db+postgresql://scott:tiger@localhost/mydatabase'
# oracle
result_backend = 'db+oracle://scott:tiger@127.0.0.1:1521/sidname'
Список поддерживаемых баз данных см. в разделе Поддерживаемые базы данных, а дополнительные сведения о строках подключения — в разделе Строка подключения (это часть URI после префикса db+).
Примечание
При обновлении с Celery 5.6 или более ранней версии столбец date_done в таблицах celery_taskmeta и celery_tasksetmeta не имеет индекса базы данных. Встроенная периодическая задача celery.backend_cleanup выполняет запросы по date_done для удаления результатов задач с истёкшим сроком действия, поэтому добавление индекса значительно ускоряет очистку больших таблиц.
Поскольку create_all() SQLAlchemy не изменяет существующие таблицы, необходимо обновить схему базы данных. Если для миграции схем используется Alembic, можно создать пустую ревизию и применить следующие операции:
from alembic import op
def upgrade():
op.create_index('ix_celery_taskmeta_date_done', 'celery_taskmeta', ['date_done'])
op.create_index('ix_celery_tasksetmeta_date_done', 'celery_tasksetmeta', ['date_done'])
def downgrade():
op.drop_index('ix_celery_tasksetmeta_date_done', table_name='celery_tasksetmeta')
op.drop_index('ix_celery_taskmeta_date_done', table_name='celery_taskmeta')
В противном случае индексы можно добавить вручную с помощью SQL:
CREATEINDEXix_celery_taskmeta_date_doneONcelery_taskmeta(date_done);
CREATEINDEXix_celery_tasksetmeta_date_doneONcelery_tasksetmeta(date_done);
database_create_tables_at_setup
Добавлено в версии 5.5.0.
По умолчанию: True.
Если значение True, Celery создаст таблицы в базе данных во время настройки.
Если значение False, Celery будет создавать таблицы по мере необходимости, то есть дождётся выполнения первой задачи.
Примечание
До версии Celery 5.5 таблицы создавались по мере необходимости, то есть поведение было эквивалентно установке database_create_tables_at_setup в значение False.
database_engine_options
По умолчанию: {'pool_pre_ping': True, 'pool_recycle': 3600}
Изменено в версии 5.7: значение по умолчанию изменено с {}: добавлены pool_pre_ping=True и pool_recycle=3600 для улучшения обработки состояния соединений. Это помогает предотвратить ошибки устаревших соединений, например (OperationalError) (2006, 'MySQL server has gone away').
Чтобы задать дополнительные параметры движка базы данных SQLAlchemy, используйте настройку database_engine_options:
# echo enables verbose logging from SQLAlchemy.
app.conf.database_engine_options = {'echo': True}
# To disable the default pool health options:
app.conf.database_engine_options = {'pool_pre_ping': False, 'pool_recycle': None}
database_short_lived_sessions
По умолчанию: отключено.
По умолчанию сеансы с коротким сроком действия отключены. При включении они могут значительно снизить производительность, особенно в системах, обрабатывающих большое количество задач. Этот параметр полезен для рабочих процессов с низкой нагрузкой, в которых возникают ошибки из-за того, что кэшированные соединения с базой данных устаревают в периоды бездействия. Например, периодические ошибки вида (OperationalError) (2006, ‘MySQL server has gone away’) можно устранить, включив сеансы с коротким сроком действия. Этот параметр влияет только на бэкенд базы данных.
database_table_schemas
По умолчанию: {} (пустое отображение).
Когда SQLAlchemy настроен в качестве бэкенда результатов, Celery автоматически создаёт две таблицы для хранения метаданных результатов задач. Этот параметр позволяет настроить схемы таблиц:
# use custom schema for the database result backend.
database_table_schemas = {
'task': 'celery',
'group': 'celery',
}
database_table_names
По умолчанию: {} (пустое отображение).
Когда SQLAlchemy настроен в качестве бэкенда результатов, Celery автоматически создаёт две таблицы для хранения метаданных результатов задач. Этот параметр позволяет настроить имена таблиц:
# use custom table names for the database result backend.
database_table_names = {
'task': 'myapp_taskmeta',
'group': 'myapp_groupmeta',
}
result_persistent
По умолчанию: отключено (временные сообщения).
Если установить значение True, сообщения с результатами будут сохраняться. Это означает, что они не будут потеряны при перезапуске брокера.
Пример конфигурации
result_backend = 'rpc://' result_persistent = False
Обратите внимание: при использовании этого бэкенда может возникнуть celery.backends.rpc.BacklogLimitExceeded, если запись результата задачи слишком старая.
Например:
for i in range(10000):
r = debug_task.delay()
print(r.state) # this would raise celery.backends.rpc.BacklogLimitExceeded
Примечание
Бэкенд кэша поддерживает библиотеки https://pypi.org/project/pylibmc/ и https://pypi.org/project/python-memcached/. Последняя используется, только если https://pypi.org/project/pylibmc/ не установлена.
Использование одного сервера Memcached:
result_backend = 'cache+memcached://127.0.0.1:11211/'
Использование нескольких серверов Memcached:
result_backend = """
cache+memcached://172.19.26.240:11211;172.19.26.242:11211/
""".strip()
Бэкенд «memory» хранит кэш только в памяти:
result_backend = 'cache' cache_backend = 'memory'
cache_backend_options
По умолчанию: {} (пустое отображение).
Можно задать параметры https://pypi.org/project/pylibmc/ с помощью настройки cache_backend_options:
cache_backend_options = {
'binary': True,
'behaviors': {'tcp_nodelay': True},
}
cache_backend
Эта настройка больше не используется во встроенных бэкендах celery, поскольку теперь бэкенд кэша можно указать непосредственно в настройке result_backend.
Примечание
Библиотека django-celery-results — использование Django ORM/кэша в качестве бэкенда результатов использует cache_backend для выбора кэшей django.
Примечание
Для бэкенда MongoDB требуется библиотека pymongo: http://github.com/mongodb/mongo-python-driver/tree/master
mongodb_backend_settings
Это словарь со следующими ключами:
-
- database
-
Имя базы данных для подключения. По умолчанию —
celery.
-
- taskmeta_collection
-
Имя коллекции для хранения метаданных задач. По умолчанию —
celery_taskmeta.
-
- max_pool_size
-
Передаётся как max_pool_size конструктору Connection или MongoClient в PyMongo. Это максимальное количество TCP-подключений к MongoDB, которые могут оставаться открытыми одновременно. Если открытых подключений больше, чем max_pool_size, сокеты будут закрываться при освобождении. По умолчанию — 10.
-
options
Дополнительные именованные аргументы, передаваемые конструктору подключения к mongodb. Список поддерживаемых аргументов см. в документации
pymongo.
Примечание
В pymongo>=4.14 параметры учитывают регистр, тогда как раньше регистр не учитывался. Сведения о правильном регистре см. в MongoClient.
Пример конфигурации
result_backend = 'mongodb://localhost:27017/'
mongodb_backend_settings = {
'database': 'mydb',
'taskmeta_collection': 'my_taskmeta_collection',
}
Настройка URL-адреса бэкенда
Примечание
Для бэкенда Redis требуется библиотека https://pypi.org/project/redis/.
Чтобы установить этот пакет, используйте pip:
$ pipinstallcelery[redis]
Сведения об объединении требований нескольких расширений см. в разделе Наборы.
Для этого бэкенда необходимо задать настройку result_backend, указав URL-адрес Redis или Redis через TLS:
result_backend = 'redis://username:password@host:port/db'
Например:
result_backend = 'redis://localhost/0'
эквивалентно следующему:
result_backend = 'redis://'
Для подключения к Redis через TLS используйте протокол rediss://:
result_backend = 'rediss://username:password@host:port/db?ssl_cert_reqs=required'
Обратите внимание: строка ssl_cert_reqs должна иметь одно из значений required, optional или none (однако для обратной совместимости со старыми версиями Celery строка также может иметь значение CERT_REQUIRED, CERT_OPTIONAL или CERT_NONE, но эти значения работают только в Celery, а не непосредственно в Redis).
Если необходимо использовать подключение через сокет Unix, URL-адрес должен иметь следующий формат::
result_backend = 'socket:///path/to/redis.sock'
Поля URL-адреса определены следующим образом:
-
usernameДобавлено в версии 5.1.0.
Имя пользователя для подключения к базе данных.
Обратите внимание: это поддерживается только в Redis>=6.0 и при установленном py-redis>=3.4.0.
Если используется более старая версия базы данных или клиента, имя пользователя можно опустить:
result_backend = 'redis://:password@host:port/db'
-
passwordПароль для подключения к базе данных.
-
hostИмя хоста или IP-адрес сервера Redis (например, localhost).
-
portПорт сервера Redis. По умолчанию — 6379.
-
dbНомер используемой базы данных. По умолчанию — 0. Перед номером базы данных может указываться необязательная косая черта.
При использовании TLS-подключения (протокол — rediss://) все значения из broker_use_ssl можно передать в качестве параметров запроса. Пути к сертификатам необходимо кодировать для URL, а параметр ssl_cert_reqs обязателен. Пример:
result_backend = 'rediss://:password@host:port/db?\
ssl_cert_reqs=required\
&ssl_ca_certs=%2Fvar%2Fssl%2Fmyca.pem\ # /var/ssl/myca.pem
&ssl_certfile=%2Fvar%2Fssl%2Fredis-server-cert.pem\ # /var/ssl/redis-server-cert.pem
&ssl_keyfile=%2Fvar%2Fssl%2Fprivate%2Fworker-key.pem' # /var/ssl/private/worker-key.pem
Обратите внимание: строка ssl_cert_reqs должна иметь одно из значений required, optional или none (однако для обратной совместимости строка также может иметь значение CERT_REQUIRED, CERT_OPTIONAL или CERT_NONE).
Добавлено в версии 5.1.0.
redis_backend_health_check_interval
По умолчанию: не настроено
Бэкенд Redis поддерживает проверку работоспособности. Это значение должно быть целым числом, указывающим интервал между проверками в секундах. Если во время проверки возникает ConnectionError или TimeoutError, подключение будет восстановлено, а команда повторена ровно один раз.
redis_backend_use_ssl
По умолчанию: отключено.
Бэкенд Redis поддерживает SSL. Это значение должно быть задано в виде словаря. Допустимые пары ключ-значение совпадают с указанными в подразделе redis раздела broker_use_ssl.
Добавлено в версии 5.6.
redis_backend_credential_provider
По умолчанию: отключено.
Бэкенд Redis поддерживает поставщик учётных данных. Это значение должно быть задано в виде строки с путём к классу или экземпляра класса. Например: mymodule.myfile.myclass Дополнительные сведения см. в документации RedisCredentialProvider.
redis_max_connections
По умолчанию: без ограничений.
Максимальное количество подключений в пуле подключений Redis, используемом для отправки и получения результатов.
Предупреждение
Redis вызовет исключение ConnectionError, если количество одновременных подключений превысит максимум.
redis_socket_connect_timeout
Добавлено в версии 4.0.1.
По умолчанию: None
Тайм-аут сокета в секундах при подключении к Redis из бэкенда результатов (int/float)
redis_socket_timeout
По умолчанию: 120.0 секунды.
Тайм-аут сокета в секундах для операций чтения и записи на сервер Redis (int/float), используемый бэкендом результатов redis.
redis_retry_on_timeout
Добавлено в версии 4.4.1.
По умолчанию: False
Повторять операции чтения и записи при возникновении TimeoutError на сервере Redis; настройка используется бэкендом результатов redis. Не задавайте эту переменную при подключении к Redis через сокет Unix.
redis_socket_keepalive
Добавлено в версии 4.4.1.
По умолчанию: False
TCP keepalive сокета для поддержания работоспособности подключений к серверу Redis; настройка используется бэкендом результатов redis.
redis_client_name
Добавлено в версии 5.6.
По умолчанию: None
Задаёт имя клиента для подключений Redis, используемых бэкендом результатов. Это помогает идентифицировать подключения в инструментах мониторинга Redis.
Примечание
Для драйвера бэкенда Cassandra требуется https://pypi.org/project/cassandra-driver/.
Этот бэкенд можно использовать как с обычной установкой Cassandra, так и с управляемым экземпляром Astra DB. В зависимости от выбранного варианта необходимо указать ровно одну из настроек cassandra_servers и cassandra_secure_bundle_path (но не обе).
Для установки используйте pip:
$ pipinstallcelery[cassandra]
Сведения об объединении требований нескольких расширений см. в разделе Наборы.
Для этого бэкенда необходимо задать следующие директивы конфигурации.
cassandra_servers
По умолчанию: [] (пустой список).
Список серверов Cassandra host. Его необходимо указать при подключении к кластеру Cassandra. Эту настройку нельзя использовать одновременно с cassandra_secure_bundle_path. Пример:
cassandra_servers = ['localhost']
cassandra_secure_bundle_path
По умолчанию: None.
Абсолютный путь к zip-файлу secure-connect-bundle для подключения к экземпляру Astra DB. Эту настройку нельзя использовать одновременно с cassandra_servers. Пример:
cassandra_secure_bundle_path = '/home/user/bundles/secure-connect.zip'
При подключении к Astra DB необходимо указать поставщик аутентификации в виде обычного текста, а также связанные с ним имя пользователя и пароль. В качестве этих значений используются соответственно Client ID и Client Secret действительного токена, созданного для экземпляра Astra DB. Ниже приведён пример конфигурации Astra DB.
cassandra_port
По умолчанию: 9042.
Порт для подключения к серверам Cassandra.
cassandra_keyspace
По умолчанию: None.
Пространство ключей для хранения результатов. Например:
cassandra_keyspace = 'tasks_keyspace'
cassandra_table
По умолчанию: None.
Таблица (семейство столбцов) для хранения результатов. Например:
cassandra_table = 'tasks'
cassandra_read_consistency
По умолчанию: None.
Используемый уровень согласованности чтения. Возможные значения: ONE, TWO, THREE, QUORUM, ALL, LOCAL_QUORUM, EACH_QUORUM, LOCAL_ONE.
cassandra_write_consistency
По умолчанию: None.
Используемый уровень согласованности записи. Возможные значения: ONE, TWO, THREE, QUORUM, ALL, LOCAL_QUORUM, EACH_QUORUM, LOCAL_ONE.
cassandra_entry_ttl
По умолчанию: None.
Время жизни записей статуса. По истечении этого количества секунд после добавления записи будут удалены. Значение None (по умолчанию) означает, что срок их действия не истечёт.
cassandra_auth_provider
По умолчанию: None.
Класс AuthProvider из модуля cassandra.auth. Возможные значения: PlainTextAuthProvider или SaslAuthProvider.
cassandra_auth_kwargs
По умолчанию: {} (пустое отображение).
Именованные аргументы, передаваемые поставщику аутентификации. Например:
cassandra_auth_kwargs = {
username: 'cassandra',
password: 'cassandra'
}
cassandra_options
По умолчанию: {} (пустое отображение).
Именованные аргументы, передаваемые классу cassandra.cluster.
cassandra_options = {
'cql_version': '3.2.1'
'protocol_version': 3
}
Пример конфигурации (Cassandra)
result_backend = 'cassandra://' cassandra_servers = ['localhost'] cassandra_keyspace = 'celery' cassandra_table = 'tasks' cassandra_read_consistency = 'QUORUM' cassandra_write_consistency = 'QUORUM' cassandra_entry_ttl = 86400
Пример конфигурации (Astra DB)
result_backend = 'cassandra://'
cassandra_keyspace = 'celery'
cassandra_table = 'tasks'
cassandra_read_consistency = 'QUORUM'
cassandra_write_consistency = 'QUORUM'
cassandra_auth_provider = 'PlainTextAuthProvider'
cassandra_auth_kwargs = {
'username': '<<CLIENT_ID_FROM_ASTRA_DB_TOKEN>>',
'password': '<<CLIENT_SECRET_FROM_ASTRA_DB_TOKEN>>'
}
cassandra_secure_bundle_path = '/path/to/secure-connect-bundle.zip'
cassandra_entry_ttl = 86400
Дополнительная конфигурация
При установлении подключения драйвер Cassandra согласовывает с сервером (серверами) версию протокола. Аналогичным образом автоматически задаётся политика балансировки нагрузки (по умолчанию DCAwareRoundRobinPolicy, которая, в свою очередь, имеет параметр local_dc, также определяемый драйвером при подключении). Если возможно, эти параметры следует явно указать в конфигурации. Кроме того, в будущих версиях драйвера Cassandra потребуется указать как минимум политику балансировки нагрузки (с помощью профилей выполнения, как показано ниже).
Таким образом, полная конфигурация бэкенда Cassandra будет содержать следующие дополнительные строки:
from cassandra.policies import DCAwareRoundRobinPolicy
from cassandra.cluster import ExecutionProfile
from cassandra.cluster import EXEC_PROFILE_DEFAULT
myEProfile = ExecutionProfile(
load_balancing_policy=DCAwareRoundRobinPolicy(
local_dc='datacenter1', # replace with your DC name
)
)
cassandra_options = {
'protocol_version': 5, # for Cassandra 4, change if needed
'execution_profiles': {EXEC_PROFILE_DEFAULT: myEProfile},
}
Аналогично для Astra DB:
from cassandra.policies import DCAwareRoundRobinPolicy
from cassandra.cluster import ExecutionProfile
from cassandra.cluster import EXEC_PROFILE_DEFAULT
myEProfile = ExecutionProfile(
load_balancing_policy=DCAwareRoundRobinPolicy(
local_dc='europe-west1', # for Astra DB, region name = dc name
)
)
cassandra_options = {
'protocol_version': 4, # for Astra DB
'execution_profiles': {EXEC_PROFILE_DEFAULT: myEProfile},
}
Примечание
Для драйвера бэкенда s3 требуется https://pypi.org/project/s3/.
Для установки используйте s3:
$ pipinstallcelery[s3]
Сведения об объединении требований нескольких расширений см. в разделе Наборы.
Для этого бэкенда необходимо задать следующие директивы конфигурации.
s3_access_key_id
По умолчанию: None.
Идентификатор ключа доступа s3. Например:
s3_access_key_id = 'access_key_id'
s3_secret_access_key
По умолчанию: None.
Секретный ключ доступа s3. Например:
s3_secret_access_key = 'access_secret_access_key'
s3_bucket
По умолчанию: None.
Имя контейнера s3. Например:
s3_bucket = 'bucket_name'
s3_base_path
По умолчанию: None.
Базовый путь в контейнере s3 для хранения ключей результатов. Например:
s3_base_path = '/prefix'
s3_endpoint_url
По умолчанию: None.
Пользовательский URL-адрес конечной точки s3. Используйте его для подключения к пользовательскому самостоятельно размещённому s3-совместимому бэкенду (Ceph, Scality…). Например:
s3_endpoint_url = 'https://.s3.custom.url'
s3_region
По умолчанию: None.
Регион AWS для s3. Например:
s3_region = 'us-east-1'
Пример конфигурации
s3_access_key_id = 's3-access-key-id' s3_secret_access_key = 's3-secret-access-key' s3_bucket = 'mybucket' s3_base_path = '/celery_result_backend' s3_endpoint_url = 'https://endpoint_url'
Чтобы использовать AzureBlockBlob в качестве бэкенда результатов, достаточно задать для настройки result_backend правильный URL-адрес.
Необходимый формат URL-адреса: azureblockblob://, за которым следует строка подключения к хранилищу. Строку подключения к хранилищу можно найти на панели Access Keys ресурса учётной записи хранилища на портале Azure.
Пример конфигурации
result_backend = 'azureblockblob://DefaultEndpointsProtocol=https;AccountName=somename;AccountKey=Lou...bzg==;EndpointSuffix=core.windows.net'
azureblockblob_container_name
По умолчанию: celery.
Имя контейнера хранилища для сохранения результатов.
azureblockblob_base_path
Добавлено в версии 5.1.
По умолчанию: None.
Базовый путь в контейнере хранилища для сохранения ключей результатов. Например:
azureblockblob_base_path = 'prefix/'
azureblockblob_retry_initial_backoff_sec
По умолчанию: 2.
Начальный интервал ожидания перед первой повторной попыткой в секундах. Последующие повторы выполняются с использованием экспоненциальной стратегии.
azureblockblob_retry_increment_base
По умолчанию: 2.
azureblockblob_retry_max_attempts
По умолчанию: 3.
Максимальное количество повторных попыток.
azureblockblob_connection_timeout
По умолчанию: 20.
Тайм-аут в секундах для установки подключения к Azure block blob.
azureblockblob_read_timeout
По умолчанию: 120.
Тайм-аут в секундах для чтения Azure block blob.
Примечание
Для драйвера бэкенда gcs требуются https://pypi.org/project/google-cloud-storage/ и https://pypi.org/project/google-cloud-firestore/.
Для установки используйте gcs:
$ pipinstallcelery[gcs]
Сведения об объединении требований нескольких расширений см. в разделе Наборы.
GCS можно настроить с помощью URL-адреса, указанного в result_backend, например:
result_backend = 'gs://mybucket/some-prefix?gcs_project=myproject&ttl=600'
result_backend = 'gs://mybucket/some-prefix?gcs_project=myproject?firestore_project=myproject2&ttl=600'
Для этого бэкенда необходимо задать следующие директивы конфигурации:
gcs_bucket
По умолчанию: None.
Имя контейнера gcs. Например:
gcs_bucket = 'bucket_name'
gcs_project
По умолчанию: None.
Имя проекта gcs. Например:
gcs_project = 'test-project'
gcs_base_path
По умолчанию: None.
Базовый путь в контейнере gcs для хранения всех ключей результатов. Например:
gcs_base_path = '/prefix'
gcs_ttl
По умолчанию: 0.
Время жизни объектов результатов в секундах. Требуется контейнер GCS с включённым действием управления жизненным циклом объектов «Delete». Используйте эту настройку для автоматического удаления результатов из контейнеров Cloud Storage.
Например, чтобы автоматически удалять результаты через 24 часа:
gcs_ttl = 86400
gcs_threadpool_maxsize
По умолчанию: 10.
Размер пула потоков для операций GCS. Это же значение задаёт размер пула подключений. Позволяет управлять количеством параллельных операций. Например:
gcs_threadpool_maxsize = 20
firestore_project
По умолчанию: gcs_project.
Проект Firestore для подсчёта ссылок на Chord. Позволяет использовать встроенный подсчёт ссылок Chord. Если параметр не задан, используется значение gcs_project. Например:
firestore_project = 'test-project2'
Пример конфигурации
gcs_bucket = 'mybucket' gcs_project = 'myproject' gcs_base_path = '/celery_result_backend' gcs_ttl = 86400
Чтобы использовать Elasticsearch в качестве бэкенда результатов, достаточно задать для настройки result_backend правильный URL-адрес.
Пример конфигурации
result_backend = 'elasticsearch://example.com:9200/index_name/doc_type'
elasticsearch_retry_on_timeout
По умолчанию: False
Должен ли тайм-аут приводить к повторной попытке на другом узле?
elasticsearch_max_retries
По умолчанию: 3.
Максимальное количество повторных попыток до передачи исключения вызывающему коду.
elasticsearch_timeout
По умолчанию: 10.0 секунды.
Общий тайм-аут, используемый бэкендом результатов elasticsearch.
elasticsearch_save_meta_as_text
По умолчанию: True
Следует ли сохранять метаданные в виде текста или собственного формата JSON. Результат всегда сериализуется в виде текста.
Примечание
Для бэкенда Dynamodb требуется библиотека https://pypi.org/project/boto3/.
Чтобы установить этот пакет, используйте pip:
$ pipinstallcelery[dynamodb]
Информацию о том, как объединить требования нескольких расширений, см. в разделе Наборы.
Предупреждение
Бэкенд Dynamodb несовместим с таблицами, для которых определён ключ сортировки.
Если вы хотите выполнять запросы к таблице результатов по параметру, отличному от ключа раздела, определите вместо этого глобальный вторичный индекс (GSI).
Для этого бэкенда необходимо задать параметр result_backend со значением URL DynamoDB:
result_backend = 'dynamodb://aws_access_key_id:aws_secret_access_key@region:port/table?read=n&write=m'
Например, указав регион AWS и имя таблицы:
result_backend = 'dynamodb://@us-east-1/celery_results'
или получив параметры конфигурации AWS из среды, используя имя таблицы по умолчанию (celery) и указав выделенную пропускную способность для чтения и записи:
result_backend = 'dynamodb://@/?read=5&write=5'
или используя загружаемую версию DynamoDB локально:
result_backend = 'dynamodb://@localhost:8000'
или используя загружаемую версию либо другую службу с совместимым API, развёрнутую на любом узле:
result_backend = 'dynamodb://@us-east-1'
dynamodb_endpoint_url = 'http://192.168.0.40:8000'
Поля URL DynamoDB в result_backend определяются следующим образом:
-
aws_access_key_id & aws_secret_access_keyУчётные данные для доступа к ресурсам API AWS. Библиотека https://pypi.org/project/boto3/ также может получать их из различных источников, как описано здесь.
-
regionРегион AWS, например
us-east-1илиlocalhostдля загружаемой версии. Варианты задания параметра см. в документации библиотеки https://pypi.org/project/boto3/. -
portПорт локального экземпляра DynamoDB, если вы используете загружаемую версию. Если параметру
regionне присвоено значениеlocalhost, установка этого параметра не влияет на работу. -
tableИмя используемой таблицы. По умолчанию —
celery. Сведения о допустимых символах и длине имени см. в правилах именования DynamoDB. -
read & writeЕдиницы ёмкости чтения и записи для создаваемой таблицы DynamoDB. По умолчанию для чтения и записи используется
1. Дополнительные сведения см. в документации по выделенной пропускной способности. -
ttl_secondsВремя жизни результатов (в секундах) до истечения срока их действия. По умолчанию срок действия результатов не истекает, а настройки времени жизни таблицы DynamoDB не изменяются. Если для
ttl_secondsзадано положительное значение, срок действия результатов истечёт через указанное количество секунд. Отрицательное значениеttl_secondsозначает, что срок действия результатов не истекает, а настройка времени жизни таблицы DynamoDB принудительно отключается. Обратите внимание: попытка несколько раз подряд изменить настройку времени жизни таблицы приведёт к ошибке ограничения частоты запросов. Дополнительные сведения см. в документации по TTL DynamoDB
Примечание
Для бэкенда IronCache требуется библиотека https://pypi.org/project/iron_celery/:
Чтобы установить этот пакет, используйте pip:
$ pipinstalliron_celery
IronCache настраивается с помощью URL, указанного в result_backend, например:
result_backend = 'ironcache://project_id:token@'
Или чтобы изменить имя кэша:
ironcache:://project_id:token@/awesomecache
Дополнительные сведения см. на странице: https://github.com/iron-io/iron_celery
Примечание
Для бэкенда Couchbase требуется библиотека https://pypi.org/project/couchbase/.
Чтобы установить этот пакет, используйте pip:
$ pipinstallcelery[couchbase]
Инструкции по объединению требований нескольких расширений см. в разделе Наборы.
Этот бэкенд можно настроить, задав для параметра result_backend URL Couchbase:
result_backend = 'couchbase://username:password@host:port/bucket'
couchbase_backend_settings
По умолчанию: {} (пустое отображение).
Это словарь, поддерживающий следующие ключи:
-
hostИмя узла сервера Couchbase. По умолчанию —
localhost. -
portПорт, на котором прослушивает соединения сервер Couchbase. По умолчанию —
8091. -
bucketБакет по умолчанию, в который выполняет запись сервер Couchbase. По умолчанию —
default. -
usernameИмя пользователя для аутентификации на сервере Couchbase (необязательно).
-
passwordПароль для аутентификации на сервере Couchbase (необязательно).
Примечание
Для бэкенда ArangoDB требуется библиотека https://pypi.org/project/pyArango/.
Чтобы установить этот пакет, используйте pip:
$ pipinstallcelery[arangodb]
Инструкции по объединению требований нескольких расширений см. в разделе Наборы.
Этот бэкенд можно настроить, задав для параметра result_backend URL ArangoDB:
result_backend = 'arangodb://username:password@host:port/database/collection'
arangodb_backend_settings
По умолчанию: {} (пустое отображение).
Это словарь, поддерживающий следующие ключи:
-
hostИмя узла сервера ArangoDB. По умолчанию —
localhost. -
portПорт, на котором прослушивает соединения сервер ArangoDB. По умолчанию —
8529. -
databaseБаза данных по умолчанию, в которую выполняет запись сервер ArangoDB. По умолчанию —
celery. -
collectionКоллекция по умолчанию в базе данных сервера ArangoDB, в которую выполняется запись. По умолчанию —
celery. -
usernameИмя пользователя для аутентификации на сервере ArangoDB (необязательно).
-
passwordПароль для аутентификации на сервере ArangoDB (необязательно).
-
http_protocolПротокол HTTP для подключения к серверу ArangoDB. По умолчанию —
http. -
verifyПроверка HTTPS при создании подключения к ArangoDB. По умолчанию —
False.
Чтобы использовать CosmosDB в качестве бэкенда результатов, достаточно задать параметру result_backend правильный URL.
Пример конфигурации
result_backend = 'cosmosdbsql://:{InsertAccountPrimaryKeyHere}@{InsertAccountNameHere}.documents.azure.com'
cosmosdbsql_database_name
По умолчанию: celerydb.
Имя базы данных, в которой хранятся результаты.
cosmosdbsql_collection_name
По умолчанию: celerycol.
Имя коллекции, в которой хранятся результаты.
cosmosdbsql_consistency_level
По умолчанию: Session.
Задаёт уровень согласованности, поддерживаемый операциями клиента Azure Cosmos DB.
Уровни согласованности в порядке убывания: Strong, BoundedStaleness, Session, ConsistentPrefix и Eventual.
cosmosdbsql_max_retry_attempts
По умолчанию: 9.
Максимальное количество повторных попыток выполнения запроса.
cosmosdbsql_max_retry_wait_time
По умолчанию: 30.
Максимальное время ожидания запроса в секундах во время выполнения повторных попыток.
Примечание
Для бэкенда CouchDB требуется библиотека https://pypi.org/project/pycouchdb/:
Чтобы установить этот пакет Couchbase, используйте pip:
$ pipinstallcelery[couchdb]
Информацию о том, как объединить требования нескольких расширений, см. в разделе Наборы.
Этот бэкенд можно настроить, задав для параметра result_backend URL CouchDB:
result_backend = 'couchdb://username:password@host:port/container'
URL состоит из следующих частей:
-
usernameИмя пользователя для аутентификации на сервере CouchDB (необязательно).
-
passwordПароль для аутентификации на сервере CouchDB (необязательно).
-
hostИмя узла сервера CouchDB. По умолчанию —
localhost. -
portПорт, на котором прослушивает соединения сервер CouchDB. По умолчанию —
8091. -
containerКонтейнер по умолчанию, в который выполняет запись сервер CouchDB. По умолчанию —
default.
Этот бэкенд можно настроить с помощью URL файла, например:
CELERY_RESULT_BACKEND = 'file:///var/celery/results'
Настроенный каталог должен быть общим и доступным для записи всем серверам, использующим бэкенд.
Если вы пробуете Celery на одном компьютере, бэкенд можно использовать без дополнительной настройки. Для более крупных кластеров можно использовать NFS, GlusterFS, CIFS, HDFS (через FUSE) или любую другую файловую систему.
Примечание
Для бэкенда Consul требуется библиотека https://pypi.org/project/python-consul2/:
Чтобы установить этот пакет, используйте pip:
$ pipinstallpython-consul2
Бэкенд Consul можно настроить с помощью URL, например:
CELERY_RESULT_BACKEND = 'consul://localhost:8500/'
или:
result_backend = 'consul://localhost:8500/'
Бэкенд будет хранить результаты в хранилище «ключ/значение» Consul в виде отдельных ключей. Бэкенд поддерживает автоматическое истечение срока действия результатов с помощью TTL в Consul. Полный синтаксис URL:
consul://host:port[?one_client=1]
URL состоит из следующих частей:
-
hostИмя узла сервера Consul.
-
portПорт, на котором прослушивает соединения сервер Consul.
-
one_clientПо умолчанию для обеспечения корректной работы бэкенд использует отдельное клиентское подключение для каждой операции. При чрезвычайно высокой нагрузке частое создание новых подключений может приводить к тому, что сервер Consul будет возвращать ошибки HTTP 429 «слишком много подключений». Рекомендуемый способ решения этой проблемы — включить повторные попытки в
python-consul2с помощью патча по адресу https://github.com/poppyred/python-consul2/pull/31.В качестве альтернативы, если задан
one_client, для всех операций будет использоваться одно клиентское подключение. Это должно устранить ошибки HTTP 429, однако хранение результатов в бэкенде может стать ненадёжным.
task_queues
По умолчанию: None (очередь берётся из настроек очереди по умолчанию).
Большинству пользователей не нужно задавать этот параметр; вместо этого рекомендуется использовать средства автоматической маршрутизации.
Если вам действительно нужно настроить расширенную маршрутизацию, этот параметр должен содержать список объектов kombu.Queue, из которых будет получать сообщения рабочий процесс.
Обратите внимание: для рабочих процессов этот параметр можно переопределить с помощью параметра -Q, а отдельные очереди из этого списка (по имени) можно исключить с помощью параметра -X.
Дополнительную информацию см. также в разделе Основы.
По умолчанию используется очередь/обменник/ключ привязки celery с типом обменника direct.
См. также task_routes
task_routes
По умолчанию: None.
Список маршрутизаторов или один маршрутизатор, используемый для отправки задач в очереди. При определении конечного адресата задачи маршрутизаторы опрашиваются по порядку.
Маршрутизатор можно задать одним из следующих способов:
Функция с сигнатурой
(name, args, kwargs, options, task=None, **kwargs)Строка с путём к функции маршрутизатора.
-
- Словарь с описанием маршрутизатора:
-
Будет преобразован в экземпляр
celery.routes.MapRoute.
-
- Список кортежей
(pattern, route): -
Будет преобразован в экземпляр
celery.routes.MapRoute.
- Список кортежей
Примеры:
task_routes = {
'celery.ping': 'default',
'mytasks.add': 'cpu-bound',
'feed.tasks.*': 'feeds', # <-- glob pattern
re.compile(r'(image|video)\.tasks\..*'): 'media', # <-- regex
'video.encode': {
'queue': 'video',
'exchange': 'media',
'routing_key': 'media.video.encode',
},
}
task_routes = ('myapp.tasks.route_task', {'celery.ping': 'default'})
В этом случае myapp.tasks.route_task может иметь такой вид:
def route_task(self, name, args, kwargs, options, task=None, **kw):
if task == 'celery.ping':
return {'queue': 'default'}
route_task может возвращать строку или словарь. Строка обозначает имя очереди в task_queues, а словарь — пользовательский маршрут.
При отправке задач маршрутизаторы опрашиваются по порядку. Используется маршрут первого маршрутизатора, который возвращает значение, отличное от None. Затем параметры сообщения объединяются с найденными настройками маршрута, причём настройки задачи имеют приоритет.
Например, если apply_async() имеет следующие аргументы:
Task.apply_async(immediate=False, exchange='video',
routing_key='video.compress')
а маршрутизатор возвращает:
{'immediate': True, 'exchange': 'urgent'}
итоговые параметры сообщения будут следующими:
immediate=False, exchange='video', routing_key='video.compress'
(а также любые параметры сообщения по умолчанию, определённые в классе Task)
При объединении значения, заданные в task_routes, имеют приоритет над значениями, заданными в task_queues.
При следующих настройках:
task_queues = {
'cpubound': {
'exchange': 'cpubound',
'routing_key': 'cpubound',
},
}
task_routes = {
'tasks.add': {
'queue': 'cpubound',
'routing_key': 'tasks.add',
'serializer': 'json',
},
}
итоговые параметры маршрутизации для tasks.add будут следующими:
{'exchange':'cpubound',
'routing_key':'tasks.add',
'serializer':'json'}
Дополнительные примеры см. в разделе Маршрутизаторы.
task_queue_max_priority
- брокеры:
-
RabbitMQ
По умолчанию: None.
См. раздел Приоритеты сообщений RabbitMQ.
task_default_priority
- брокеры:
-
RabbitMQ, Redis
По умолчанию: None.
См. раздел Приоритеты сообщений RabbitMQ.
task_inherit_parent_priority
- брокеры:
-
RabbitMQ
По умолчанию: False.
Если этот параметр включён, дочерние задачи наследуют приоритет родительской задачи.
# The last task in chain will also have priority set to 5. chain = celery.chain(add.s(2) | add.s(2).set(priority=5) | add.s(3))
Наследование приоритета также работает при вызове дочерних задач из родительской задачи с помощью delay или apply_async.
См. раздел Приоритеты сообщений RabbitMQ.
worker_direct
По умолчанию: отключено.
Этот параметр включает выделенную очередь для каждого рабочего процесса, позволяя направлять задачи конкретным рабочим процессам.
Имя очереди для каждого рабочего процесса автоматически формируется на основе имени узла рабочего процесса и суффикса .dq с использованием обменника C.dq2.
Например, имя очереди для рабочего процесса с именем узла w1@example.com будет таким:
w1@example.com.dq
После этого можно направить задачу рабочему процессу, указав имя узла в качестве ключа маршрутизации, а обменник C.dq2:
task_routes = {
'tasks.add': {'exchange': 'C.dq2', 'routing_key': 'w1@example.com'}
}
task_create_missing_queues
По умолчанию: включено.
Если этот параметр включён (по умолчанию), все указанные очереди, не определённые в task_queues, будут создаваться автоматически. См. раздел Автоматическая маршрутизация.
task_create_missing_queue_type
Добавлено в версии 5.6.
По умолчанию: "classic"
Когда Celery необходимо объявить несуществующую очередь (то есть если включён параметр task_create_missing_queues), этот параметр задаёт тип создаваемой очереди RabbitMQ.
"classic"(по умолчанию): объявляет стандартную классическую очередь."quorum": объявляет кворумную очередь RabbitMQ (добавляетx-queue-type: quorum).
task_create_missing_queue_exchange_type
Добавлено в версии 5.6.
По умолчанию: None
Если этому параметру присвоено значение None или пустая строка (по умолчанию), Celery оставляет обменник без изменений, таким, каким его возвращает ваш обработчик app.amqp.Queues.autoexchange.
Можно задать конкретный тип обменника, например "direct", "topic" или "fanout", чтобы создать отсутствующую очередь с этим типом обменника.
Сочетайте этот параметр с task_create_missing_queue_type = “quorum”, чтобы создавать кворумные очереди, связанные с тематическим обменником, например:
app.conf.task_create_missing_queues=True
app.conf.task_create_missing_queue_type="quorum"
app.conf.task_create_missing_queue_exchange_type="topic"
Как и указанный выше параметр типа очереди, этот параметр не влияет на очереди, явно определённые в task_queues; он применяется только к очередям, неявно создаваемым во время выполнения.
task_default_queue
По умолчанию: "celery".
Имя очереди по умолчанию, используемой методом .apply_async, если для сообщения не задан маршрут или пользовательская очередь.
Эта очередь должна быть указана в task_queues. Если параметр task_queues не задан, очередь создаётся автоматически: в список добавляется одна запись, для которой это имя используется как имя очереди.
См. также
task_default_queue_type
Добавлено в версии 5.5.
По умолчанию: "classic".
Этот параметр позволяет изменить тип очереди по умолчанию для очереди task_default_queue. Другой допустимый вариант — "quorum", который поддерживается только RabbitMQ и задаёт тип очереди quorum с помощью аргумента очереди x-queue-type.
Если включён параметр worker_detect_quorum_queues, рабочий процесс автоматически определит тип очереди и соответствующим образом отключит глобальный QoS.
Предупреждение
Для кворумных очередей необходимо включить подтверждение публикации. Используйте broker_transport_options, чтобы включить подтверждение публикации, задав:
broker_transport_options = {"confirm_publish": True}
Дополнительные сведения см. в документации RabbitMQ.
task_default_exchange
По умолчанию: используется значение, заданное для task_default_queue.
Имя обменника по умолчанию, используемого, если для ключа в параметре task_queues не указан пользовательский обменник.
task_default_exchange_type
По умолчанию: "direct".
Тип обменника по умолчанию, используемый, если для ключа в параметре task_queues не указан пользовательский тип обменника.
task_default_routing_key
По умолчанию: используется значение, заданное для task_default_queue.
Ключ маршрутизации по умолчанию, используемый, если для ключа в параметре task_queues не указан пользовательский ключ маршрутизации.
task_default_delivery_mode
По умолчанию: "persistent".
Может принимать значение transient (сообщения не записываются на диск) или persistent (сообщения записываются на диск).
broker_url
По умолчанию: "amqp://"
URL брокера по умолчанию. Он должен иметь следующий формат:
transport://userid:password@hostname:port/virtual_host
Обязательна только часть со схемой (transport://), остальная часть необязательна и по умолчанию принимает значения, заданные для конкретного транспорта.
Часть с транспортом определяет используемую реализацию брокера. По умолчанию используется amqp (если установлен librabbitmq, используется он; в противном случае — pyamqp). Доступны и другие варианты, в том числе redis://, sqs:// и qpid://.
В качестве схемы также можно указать полный путь к собственной реализации транспорта:
broker_url = 'proj.transports.MyTransport://localhost'
Можно указать несколько URL брокеров для одного и того же транспорта. URL брокеров можно передать одной строкой, разделив их точками с запятой:
broker_url = 'transport://userid:password@hostname:port//;transport://userid:password@hostname:port//'
Или списком:
broker_url = [
'transport://userid:password@localhost:port//',
'transport://userid:password@hostname:port//'
]
Затем брокеры будут использоваться в соответствии со стратегией broker_failover_strategy.
Дополнительную информацию см. в разделе Celery с SQS документации Kombu.
broker_read_url / broker_write_url
По умолчанию: значение из broker_url.
Эти параметры можно задать вместо broker_url, чтобы указать разные параметры подключения к брокеру для получения и отправки сообщений.
Пример:
broker_read_url = 'amqp://user:pass@broker.example.com:56721'
broker_write_url = 'amqp://user:pass@broker.example.com:56722'
Оба параметра также можно указать в виде списка альтернатив для переключения при сбое. Дополнительную информацию см. в разделе broker_url.
broker_failover_strategy
По умолчанию: "round-robin".
Стратегия переключения по умолчанию для объекта Connection брокера. Если она указана, это может быть ключ в ‘kombu.connection.failover_strategies’ или ссылка на любой метод, который возвращает один элемент из переданного списка.
Пример:
# Random failover strategy
defrandom_failover_strategy(servers):
it = list(servers) # don't modify callers list
shuffle = random.shuffle
for _ in repeat(None):
shuffle(it)
yield it[0]
broker_failover_strategy = random_failover_strategy
broker_heartbeat
- поддерживаемые транспорты:
-
pyamqp
По умолчанию: 120.0 (значение согласовывается сервером).
Примечание. Это значение используется только исполнителем; на данный момент клиенты не используют сердцебиение.
Не всегда возможно своевременно обнаружить потерю соединения, используя только TCP/IP. Поэтому в AMQP предусмотрен механизм сердцебиения, который используется и клиентом, и брокером для обнаружения закрытого соединения.
Если значение интервала сердцебиения равно 10 секундам, сердцебиение будет проверяться с интервалом, заданным параметром broker_heartbeat_checkrate (по умолчанию проверка выполняется с частотой, вдвое превышающей частоту сердцебиения: при интервале 10 секунд проверка выполняется каждые 5 секунд).
broker_heartbeat_checkrate
- поддерживаемые транспорты:
-
pyamqp
По умолчанию: 2.0.
Через заданные интервалы исполнитель проверяет, не пропустил ли брокер слишком много сигналов сердцебиения. Частота проверок рассчитывается делением значения broker_heartbeat на это значение. Например, если интервал сердцебиения равен 10.0, а частота проверки — значению по умолчанию 2.0, проверка будет выполняться каждые 5 секунд (вдвое чаще, чем отправляются сигналы сердцебиения).
broker_use_ssl
- поддерживаемые транспорты:
-
pyamqp,redis
По умолчанию: отключено.
Включает использование SSL для подключения к брокеру и задаёт параметры SSL.
Допустимые значения этого параметра зависят от транспорта.
pyamqp
Если указано True, соединение будет использовать SSL с параметрами SSL по умолчанию. Если указать словарь, параметры SSL-соединения будут настроены в соответствии с указанной политикой. Используется формат параметров ssl.wrap_socket() в Python.
Обратите внимание, что брокер обычно обслуживает SSL-сокеты на отдельном порту.
Пример настройки сертификата клиента и проверки сертификата сервера с помощью пользовательского центра сертификации:
import ssl
broker_use_ssl = {
'keyfile': '/var/ssl/private/worker-key.pem',
'certfile': '/var/ssl/amqp-server-cert.pem',
'ca_certs': '/var/ssl/myca.pem',
'cert_reqs': ssl.CERT_REQUIRED
}
Добавлено в версии 5.1: Начиная с Celery 5.1, py-amqp всегда проверяет сертификаты, полученные от сервера, поэтому больше нет необходимости вручную задавать cert_reqs в значение ssl.CERT_REQUIRED.
Предыдущее значение по умолчанию, ssl.CERT_NONE, небезопасно, поэтому его использование не рекомендуется. Чтобы вернуться к прежнему небезопасному значению по умолчанию, установите для cert_reqs значение ssl.CERT_NONE.
redis
Параметр должен быть словарём со следующими ключами:
-
-
ssl_cert_reqs(обязательно): одно из значенийSSLContext.verify_mode: -
ssl.CERT_NONEssl.CERT_OPTIONALssl.CERT_REQUIRED
-
ssl_ca_certs(необязательно): путь к сертификату CAssl_certfile(необязательно): путь к сертификату клиентаssl_keyfile(необязательно): путь к ключу клиента
broker_pool_limit
Добавлено в версии 2.3.
По умолчанию: 10.
Максимальное количество соединений, которые могут быть открыты в пуле соединений.
Пул включён по умолчанию начиная с версии 2.5, его лимит по умолчанию составляет десять соединений. Это значение можно изменить в зависимости от количества потоков/зелёных потоков (eventlet/gevent), использующих соединение. Например, при использовании eventlet с 1000 гринлетами, подключающимися к брокеру, может возникнуть конкуренция за ресурсы — в таком случае следует увеличить лимит.
Если задать значение None или 0, пул соединений будет отключён, а соединения будут устанавливаться и закрываться при каждом использовании.
broker_connection_timeout
По умолчанию: 4.0.
Тайм-аут в секундах, по истечении которого прекращаются попытки установить соединение с сервером AMQP. Этот параметр отключён при использовании gevent.
Примечание
Тайм-аут подключения к брокеру применяется только к попыткам исполнителя подключиться к брокеру. Он не применяется к отправке задачи производителем. О том, как задать тайм-аут для такого случая, см. broker_transport_options.
broker_connection_retry
По умолчанию: включено.
Автоматически пытаться восстановить соединение с брокером AMQP, если оно потеряно после первоначального подключения.
Интервал между попытками увеличивается после каждой попытки; попытки не прекращаются, пока не будет превышено значение broker_connection_max_retries.
Предупреждение
В Celery 6.0 и более поздних версиях параметр broker_connection_retry больше не будет определять, выполняются ли повторные попытки подключения к брокеру при запуске. Чтобы отключить повторные попытки подключения при запуске, задайте broker_connection_retry_on_startup значение False.
broker_connection_retry_on_startup
По умолчанию: включено.
Автоматически пытаться подключиться к брокеру AMQP при запуске Celery, если он недоступен.
Интервал между попытками увеличивается после каждой попытки; попытки не прекращаются, пока не будет превышено значение broker_connection_max_retries.
broker_connection_max_retries
По умолчанию: 100.
Максимальное количество попыток восстановления соединения с брокером AMQP, после которого попытки прекращаются.
Если указать None, попытки будут повторяться бесконечно.
broker_channel_error_retry
Добавлено в версии 5.3.
По умолчанию: отключено.
Автоматически пытаться восстановить соединение с брокером AMQP, если получен недопустимый ответ.
Количество и интервал повторных попыток такие же, как у broker_connection_retry. Этот параметр также не работает, если broker_connection_retry имеет значение False.
broker_login_method
По умолчанию: "AMQPLAIN".
Задаёт пользовательский метод входа AMQP.
broker_native_delayed_delivery_queue_type
Добавлено в версии 5.5.
- поддерживаемые транспорты:
-
pyamqp
По умолчанию: "quorum".
Этот параметр позволяет изменить тип очереди по умолчанию для встроенных очередей отложенной доставки. Другой допустимый вариант — "classic", поддерживаемый только RabbitMQ: он задаёт тип очереди classic с помощью аргумента очереди x-queue-type.
broker_transport_options
Добавлено в версии 2.2.
По умолчанию: {} (пустое отображение).
Словарь дополнительных параметров, передаваемых базовому транспорту.
Список поддерживаемых параметров (если они есть) см. в руководстве пользователя вашего транспорта.
Пример задания тайм-аута видимости (поддерживается транспортами Redis и SQS):
broker_transport_options = {'visibility_timeout': 18000} # 5 hours
Пример задания максимального количества попыток подключения производителя (чтобы производители не повторяли попытки бесконечно, если брокер недоступен при первой отправке задачи):
broker_transport_options = {'max_retries': 5}
Пример включения подтверждений публикации (поддерживается транспортом pyamqp). Без этого сообщения могут незаметно отбрасываться, когда у брокера заканчиваются ресурсы:
broker_transport_options = {'confirm_publish': True}
imports
По умолчанию: [] (пустой список).
Последовательность модулей для импорта при запуске исполнителя.
Этот параметр используется для указания модулей задач, которые нужно импортировать, а также для импорта обработчиков сигналов, дополнительных команд удалённого управления и т. д.
Модули импортируются в исходном порядке.
include
По умолчанию: [] (пустой список).
Имеет те же семантические свойства, что и imports, но позволяет разделить категории импорта.
Модули этого параметра импортируются после модулей из imports.
worker_deduplicate_successful_tasks
Добавлено в версии 5.1.
По умолчанию: False
Перед выполнением каждой задачи указывает исполнителю проверять, является ли это сообщение дубликатом.
Дедупликация выполняется только для задач с одинаковым идентификатором, включённым поздним подтверждением, повторно доставленных брокером сообщений и имеющих состояние SUCCESS в бэкенде результатов.
Чтобы избежать чрезмерного количества запросов к бэкенду результатов, перед обращением к нему проверяется локальный кэш успешно выполненных задач — на случай, если задача уже была успешно выполнена тем же исполнителем, который получил это сообщение.
Этот кэш можно сделать постоянным, задав параметр worker_state_db.
Если бэкенд результатов не является постоянным (например, используется бэкенд RPC), этот параметр игнорируется.
worker_concurrency
По умолчанию: количество ядер ЦП.
Количество процессов/потоков/зелёных потоков исполнителя, одновременно выполняющих задачи.
Если основная нагрузка связана с вводом-выводом, можно увеличить количество процессов. Если же нагрузка преимущественно связана с ЦП, старайтесь, чтобы оно было близко к количеству процессоров на компьютере. Если параметр не задан, используется количество ЦП/ядер на хосте.
worker_prefetch_multiplier
По умолчанию: 4.
Количество предварительно получаемых сообщений, умноженное на количество одновременно работающих процессов. Значение по умолчанию — 4 (четыре сообщения на каждый процесс). Обычно оно подходит, однако если в очереди ожидают очень длительные задачи и нужно запустить исполнители, учтите, что первый запущенный исполнитель изначально получит в четыре раза больше сообщений. В результате задачи могут распределяться между исполнителями неравномерно.
Чтобы брокер доставлял только одно сообщение за раз каждому процессу, установите worker_prefetch_multiplier в значение 1. Если задать этому параметру значение 0, исполнитель сможет получать столько сообщений, сколько захочет.
Если нужно полностью отключить предварительное получение сообщений от брокера, продолжая использовать ранние подтверждения, включите worker_disable_prefetch. При включённом параметре исполнитель получает задачу от брокера, только когда один из его процессов свободен.
Примечание
В настоящее время эта возможность поддерживается только при использовании Redis в качестве брокера.
Эту возможность также можно включить с помощью флага командной строки --disable-prefetch.
Подробнее о предварительном получении сообщений см. в разделе Ограничения предварительного получения.
worker_eta_task_limit
Добавлено в версии 5.6.
По умолчанию: без ограничений (None).
Максимальное количество задач с ETA/обратным отсчётом, которые исполнитель может одновременно хранить в памяти. При достижении этого лимита исполнитель перестанет получать новые задачи от брокера, пока не будут выполнены некоторые из ожидающих задач с ETA.
Этот параметр помогает предотвратить исчерпание памяти, если в очереди находится большое количество задач со значениями ETA/обратного отсчёта, поскольку такие задачи хранятся в памяти до наступления времени выполнения. Без этого ограничения исполнители могут загрузить в память тысячи задач с ETA, что потенциально приведёт к нехватке памяти.
Примечание
Задачи с ETA/обратным отсчётом загружаются в память и планируются с помощью внутреннего таймера, поэтому на них не распространяется окно предварительного получения для каждого процесса, определяемое параметром worker_prefetch_multiplier, как на задачи, выполняемые немедленно. Поэтому может казаться, что --prefetch-multiplier=1 не влияет на ситуацию, когда в очереди много задач с ETA/обратным отсчётом.
worker_eta_task_limit задаёт максимальное количество задач с ETA/обратным отсчётом, которые исполнитель может хранить в памяти, а также общий предел количества неподтверждённых сообщений с помощью QoS max_prefetch в Kombu. Если количество предварительно получаемых сообщений, подразумеваемое параметром worker_prefetch_multiplier, превышает этот предел, исполнитель перестанет получать новые сообщения, пока не будут подтверждены ранее полученные задачи.
worker_disable_prefetch
Добавлено в версии 5.6.
По умолчанию: False.
Если параметр включён, исполнитель получает сообщения от брокера, только когда у него есть свободный процесс для их выполнения. Предварительное получение отключается, но ранние подтверждения продолжают использоваться, что обеспечивает равномерное распределение задач между исполнителями.
Примечание
В настоящее время эта возможность поддерживается только при использовании Redis в качестве брокера. При использовании этого параметра с другими брокерами будет выдано предупреждение, а сам параметр будет проигнорирован.
worker_enable_prefetch_count_reduction
Добавлено в версии 5.4.
По умолчанию: включено.
Параметр worker_enable_prefetch_count_reduction определяет поведение восстановления счётчика предварительного получения до максимально допустимого значения после потери соединения с брокером сообщений. По умолчанию этот параметр включён.
При потере соединения Celery попытается автоматически подключиться к брокеру, если для параметров broker_connection_retry_on_startup или broker_connection_retry не задано значение False. Пока соединение потеряно, брокер сообщений не отслеживает количество уже полученных задач. Поэтому для эффективного управления нагрузкой и предотвращения перегрузки Celery уменьшает счётчик предварительного получения с учётом количества выполняемых в данный момент задач.
Счётчик предварительного получения — это количество сообщений, которые исполнитель получает от брокера за один раз. Уменьшение счётчика помогает избежать чрезмерного получения задач при восстановлении соединения.
Если для worker_enable_prefetch_count_reduction оставлено значение по умолчанию (включено), счётчик предварительного получения будет постепенно восстанавливаться до максимально допустимого значения по мере завершения задач, выполнявшихся до потери соединения. Такое поведение помогает поддерживать равномерное распределение задач между исполнителями и эффективно управлять нагрузкой.
Чтобы отключить уменьшение и восстановление счётчика предварительного получения до максимально допустимого значения при повторном подключении, установите для worker_enable_prefetch_count_reduction значение False. Это может быть полезно, если для управления скоростью обработки задач или нагрузкой на исполнителя требуется фиксированный счётчик предварительного получения, особенно в средах с нестабильным соединением.
Параметр worker_enable_prefetch_count_reduction позволяет управлять восстановлением счётчика предварительного получения после потери соединения, помогая поддерживать равномерное распределение задач и эффективно управлять нагрузкой между исполнителями.
worker_lost_wait
По умолчанию: 10.0 секунд.
В некоторых случаях исполнитель может быть принудительно завершён без надлежащей очистки, хотя перед завершением он успел опубликовать результат. Это значение задаёт, как долго ожидать отсутствующие результаты, прежде чем вызвать исключение WorkerLostError.
worker_max_tasks_per_child
Максимальное количество задач, которое может выполнить процесс исполнителя пула, прежде чем его заменят новым. По умолчанию ограничений нет.
worker_max_memory_per_child
По умолчанию: без ограничений. Тип: int (килобайты)
Максимальный объём резидентной памяти в килобайтах (1024 байта), который может использовать исполнитель до замены новым. Если одна задача приводит к превышению этого лимита, она будет завершена, после чего исполнитель будет заменён.
Пример:
worker_max_memory_per_child = 12288 # 12 * 1024 = 12 MB
worker_disable_rate_limits
По умолчанию: отключено (ограничения скорости включены).
Отключает все ограничения скорости, в том числе явно заданные для задач.
worker_state_db
По умолчанию: None.
Имя файла для хранения постоянного состояния исполнителя (например, отозванных задач). Можно указать относительный или абсолютный путь. Обратите внимание, что к имени файла может быть добавлено расширение .db (в зависимости от версии Python).
Также можно задать с помощью аргумента celery worker --statedb.
worker_timer_precision
По умолчанию: 1.0 секунды.
Задаёт максимальное время в секундах, в течение которого планировщик ETA может спать между проверками расписания.
Если задать значение 1 секунду, точность планировщика составит 1 секунду. Если нужна точность, близкая к миллисекунде, можно задать значение 0.1.
worker_enable_remote_control
По умолчанию: включено.
Определяет, включено ли удалённое управление исполнителями.
worker_proc_alive_timeout
По умолчанию: 4.0.
Тайм-аут в секундах (int/float) при ожидании запуска нового процесса исполнителя.
worker_cancel_long_running_tasks_on_connection_loss
Добавлено в версии 5.1.
По умолчанию: выключено.
При потере соединения завершать все длительные задачи с включённым поздним подтверждением.
Задачи, не подтверждённые до потери соединения, больше не смогут получить подтверждение, поскольку их канал закрыт, а задача повторно помещена в очередь. Поэтому задачи с включённым поздним подтверждением должны быть идемпотентными: они могут выполниться несколько раз. В этом случае при каждой потере соединения задача выполняется дважды (а иногда параллельно на других исполнителях).
При включении этого параметра незавершённые задачи отменяются, а их выполнение прекращается. Задачи, завершившиеся до потери соединения, будут зарегистрированы в бэкенде результатов, если не включён параметр task_ignore_result.
Предупреждение
Эта возможность была введена как потенциально несовместимое изменение в будущем. Если её отключить, Celery выдаст предупреждение.
В Celery 6.0 для параметра worker_cancel_long_running_tasks_on_connection_loss по умолчанию будет задано значение True, поскольку текущее поведение приводит к большему количеству проблем, чем решает.
worker_detect_quorum_queues
Добавлено в версии 5.5.
По умолчанию: включено.
Автоматически определяет, являются ли какие-либо очереди из task_queues (включая task_default_queue) кворумными, и отключает глобальный QoS, если обнаружена хотя бы одна такая очередь.
worker_soft_shutdown_timeout
Добавлено в версии 5.5.
По умолчанию: 0.0.
При стандартном мягком завершении работы исполнитель ожидает окончания всех задач, если только не инициировано принудительное завершение. Плавное завершение работы добавляет время ожидания перед началом принудительного завершения. Этот параметр задаёт, как долго исполнитель будет ждать до начала принудительного завершения и своего отключения.
Это также применяется, когда исполнитель инициирует принудительное завершение работы без предварительного мягкого завершения.
Если задано значение 0.0, плавное завершение работы фактически отключено. Независимо от значения параметра плавное завершение работы отключается, если нет выполняющихся задач (если не включён параметр worker_enable_soft_shutdown_on_idle).
Подберите оптимальное значение, позволяющее задачам корректно завершиться до остановки исполнителя. Рекомендуемые значения: 10, 30 или 60 секунд. Слишком большое значение может привести к долгому ожиданию перед остановкой исполнителя и вызвать сигнал KILL, который принудительно завершит исполнитель средствами хостовой системы.
worker_enable_soft_shutdown_on_idle
Добавлено в версии 5.5.
По умолчанию: False.
Если для параметра worker_soft_shutdown_timeout задано значение больше 0.0, исполнитель всё равно пропускает плавное завершение работы, если нет выполняющихся задач. Этот параметр позволяет выполнять плавное завершение работы даже при отсутствии активных задач.
Совет
Если исполнитель получил задачи с ETA, но время их выполнения ещё не наступило, и инициировано завершение работы, он пропустит плавное завершение и сразу перейдёт к принудительному, если нет выполняющихся задач. Это может привести к сбою при повторном помещении задач с ETA в очередь во время завершения исполнителя. Чтобы избежать этого, включите данный параметр: он гарантирует, что исполнитель будет ждать в любом случае, обеспечивая достаточно времени для корректного завершения работы и успешного возврата задач с ETA в очередь.
worker_send_task_events
По умолчанию: отключено.
Отправляет события, связанные с задачами, чтобы их можно было отслеживать с помощью таких инструментов, как flower. Задает значение по умолчанию для аргумента -E команды worker.
task_send_sent_event
Добавлено в версии 2.2.
По умолчанию: отключено.
Если параметр включен, для каждой задачи будет отправляться событие task-sent, благодаря чему задачи можно отслеживать до их получения исполнителем.
event_queue_ttl
- поддерживаемые транспорты:
-
amqp
По умолчанию: 5,0 секунды.
Время истечения срока действия сообщения в секундах (int/float), по истечении которого удаляются сообщения, отправленные в очередь событий клиента мониторинга (x-message-ttl)
Например, если задать значение 10, сообщение, доставленное в эту очередь, будет удалено через 10 секунд.
event_queue_expires
- поддерживаемые транспорты:
-
amqp
По умолчанию: 60,0 секунды.
Время истечения срока действия в секундах (int/float), по истечении которого удаляется очередь событий клиента мониторинга (x-expires).
event_queue_durable
- поддерживаемые транспорты:
-
amqp
Добавлено в версии 5.6.
По умолчанию: False
Если параметр включен, очередь получателя событий будет помечена как постоянная, то есть она сохранится после перезапуска брокера.
event_queue_exclusive
- поддерживаемые транспорты:
-
amqp
Добавлено в версии 5.6.
По умолчанию: False
Если параметр включен, очередь событий будет исключительной для текущего подключения и автоматически удалится при его закрытии.
Предупреждение
Нельзя одновременно задать для event_queue_durable и event_queue_exclusive значение True. Если задать оба параметра, Celery вызовет ошибку ImproperlyConfigured.
event_queue_prefix
По умолчанию: "celeryev".
Префикс для имен очередей получателей событий.
event_exchange
По умолчанию: "celeryev".
Имя обменника событий.
Предупреждение
Этот параметр является экспериментальным; используйте его с осторожностью.
event_serializer
По умолчанию: "json".
Формат сериализации сообщений, используемый при отправке сообщений о событиях.
См. также
events_logfile
Добавлено в версии 5.4.
По умолчанию: None
Необязательный путь к файлу, в который celery events будет записывать журнал (по умолчанию используется stdout).
events_pidfile
Добавлено в версии 5.4.
По умолчанию: None
Необязательный путь к файлу, в котором celery events создаст или сохранит PID-файл (по умолчанию PID-файл не создается).
events_uid
Добавлено в версии 5.4.
По умолчанию: None
Необязательный идентификатор пользователя, который будет использоваться, когда celery events сбрасывает привилегии (по умолчанию UID не меняется).
events_gid
Добавлено в версии 5.4.
По умолчанию: None
Необязательный идентификатор группы, который будет использоваться, когда демон celery events сбрасывает привилегии (по умолчанию GID не меняется).
events_umask
Добавлено в версии 5.4.
По умолчанию: None
Необязательная маска umask, которая будет использоваться при создании файлов (журнала, PID-файла и т. д.) демоном celery events.
events_executable
Добавлено в версии 5.4.
По умолчанию: None
Необязательный путь к исполняемому файлу python, который будет использоваться celery events при запуске в режиме демона (по умолчанию используется sys.executable).
Примечание
Чтобы отключить команды удаленного управления, см. параметр worker_enable_remote_control.
control_queue_ttl
По умолчанию: 300,0
Время в секундах, по истечении которого сообщение в очереди команд удаленного управления перестает действовать.
При значении по умолчанию 300 секунд, если команда удаленного управления отправлена, но ни один исполнитель не получил ее в течение 300 секунд, команда отбрасывается.
Этот параметр также применяется к очередям ответов удаленного управления.
control_queue_expires
По умолчанию: 10,0
Время в секундах, по истечении которого неиспользуемая очередь команд удаленного управления удаляется из брокера.
Этот параметр также применяется к очередям ответов удаленного управления.
control_exchange
По умолчанию: "celery".
Имя обменника команд управления.
Предупреждение
Этот параметр является экспериментальным; используйте его с осторожностью.
По умолчанию:
FalseТип:
bool
Если задано значение True, обменник и очередь управления будут постоянными — они сохранятся после перезапуска брокера.
По умолчанию:
FalseТип:
bool
Если задано значение True, очередь управления будет доступна только одному подключению. Как правило, это не рекомендуется в распределенных средах.
Предупреждение
Одновременное задание значений True для параметров control_queue_durable и control_queue_exclusive не поддерживается и приведет к ошибке.
worker_hijack_root_logger
Добавлено в версии 2.2.
По умолчанию: включено (перехват корневого регистратора).
По умолчанию все ранее настроенные обработчики корневого регистратора удаляются. Если вы хотите настроить собственные обработчики журналирования, отключите это поведение, задав worker_hijack_root_logger = False.
Примечание
Журналирование также можно настроить, подключившись к сигналу celery.signals.setup_logging.
worker_log_color
По умолчанию: включено, если приложение ведет журналирование в терминал.
Включает или отключает цвета в выводе журнала приложений Celery.
worker_log_format
По умолчанию:
"[%(asctime)s: %(levelname)s/%(processName)s] %(message)s"
Формат сообщений журнала.
Дополнительные сведения о форматах журнала см. в модуле Python logging.
worker_task_log_format
По умолчанию:
"[%(asctime)s: %(levelname)s/%(processName)s]
%(task_name)s[%(task_id)s]: %(message)s"
Формат сообщений журнала, записываемых при выполнении задач.
Дополнительные сведения о форматах журнала см. в модуле Python logging.
worker_redirect_stdouts
По умолчанию: включено.
Если параметр включен, stdout и stderr будут перенаправлены в текущий регистратор.
Используется командами celery worker и celery beat.
worker_redirect_stdouts_level
По умолчанию: WARNING.
Уровень журнала, с которым записывается вывод в stdout и stderr. Может быть одним из следующих: DEBUG, INFO, WARNING, ERROR или CRITICAL.
security_key
По умолчанию: None.
Добавлено в версии 2.5.
Относительный или абсолютный путь к файлу, содержащему закрытый ключ, используемый для подписания сообщений при использовании подписания сообщений.
security_key_password
По умолчанию: None.
Добавлено в версии 5.3.0.
Пароль, используемый для расшифровки закрытого ключа при использовании подписания сообщений.
security_certificate
По умолчанию: None.
Добавлено в версии 2.5.
Относительный или абсолютный путь к файлу сертификата X.509, используемого для подписания сообщений при использовании подписания сообщений.
security_cert_store
По умолчанию: None.
Добавлено в версии 2.5.
Каталог, содержащий сертификаты X.509, используемые для подписания сообщений. Может содержать шаблон с подстановочными знаками (например, /etc/certs/*.pem).
security_digest
По умолчанию: sha256.
Добавлено в версии 4.3.
Криптографическая хеш-функция, используемая для подписания сообщений при использовании подписания сообщений. https://cryptography.io/en/latest/hazmat/primitives/cryptographic-hashes/#module-cryptography.hazmat.primitives.hashes
worker_pool
По умолчанию: "prefork" (celery.concurrency.prefork:TaskPool).
Имя класса пула, используемого исполнителем.
Eventlet/Gevent
Не используйте этот параметр для выбора пула eventlet или gevent. Вместо этого используйте параметр -P команды celery worker, чтобы гарантировать, что исправления monkey patching не будут применены слишком поздно и не вызовут непредсказуемые сбои.
worker_pool_restarts
По умолчанию: отключено.
Если параметр включен, пул исполнителя можно перезапустить с помощью команды удаленного управления pool_restart.
worker_autoscaler
Добавлено в версии 2.2.
По умолчанию: "celery.worker.autoscale:Autoscaler".
Имя используемого класса автомасштабирования.
worker_consumer
По умолчанию: "celery.worker.consumer:Consumer".
Имя класса потребителя, используемого исполнителем.
worker_timer
По умолчанию: "kombu.asynchronous.hub.timer:Timer".
Имя класса планировщика ETA, используемого исполнителем. По умолчанию значение не задано или определяется реализацией пула.
worker_logfile
Добавлено в версии 5.4.
По умолчанию: None
Необязательный путь к файлу, в который celery worker будет записывать журнал (по умолчанию используется stdout).
worker_pidfile
Добавлено в версии 5.4.
По умолчанию: None
Необязательный путь к файлу, в котором celery worker создаст или сохранит PID-файл (по умолчанию PID-файл не создается).
worker_uid
Добавлено в версии 5.4.
По умолчанию: None
Необязательный идентификатор пользователя, который будет использоваться, когда демон celery worker сбрасывает привилегии (по умолчанию UID не меняется).
worker_gid
Добавлено в версии 5.4.
По умолчанию: None
Необязательный идентификатор группы, который будет использоваться, когда демон celery worker сбрасывает привилегии (по умолчанию GID не меняется).
worker_umask
Добавлено в версии 5.4.
По умолчанию: None
Необязательная маска umask, которая будет использоваться при создании файлов (журнала, PID-файла и т. д.) демоном celery worker.
worker_executable
Добавлено в версии 5.4.
По умолчанию: None
Необязательный путь к исполняемому файлу python, который будет использоваться celery worker при запуске в режиме демона (по умолчанию используется sys.executable).
beat_schedule
По умолчанию: {} (пустое отображение).
Расписание периодических задач, используемое beat. См. раздел Записи.
beat_scheduler
По умолчанию: "celery.beat:PersistentScheduler".
Класс планировщика по умолчанию. Например, можно задать "django_celery_beat.schedulers:DatabaseScheduler" при использовании расширения https://pypi.org/project/django-celery-beat/.
Также можно задать с помощью аргумента celery beat -S.
beat_schedule_filename
По умолчанию: "celerybeat-schedule".
Имя файла, используемого PersistentScheduler для хранения времени последнего запуска периодических задач. Может быть относительным или абсолютным путем; учтите, что к имени файла может быть добавлен суффикс .db (в зависимости от версии Python).
Также можно задать с помощью аргумента celery beat --schedule.
beat_sync_every
По умолчанию: 0.
Количество периодических задач, которые могут быть вызваны до выполнения следующей синхронизации с базой данных. Значение 0 (по умолчанию) означает, что синхронизация выполняется по времени — по умолчанию каждые 3 минуты, согласно scheduler.sync_every. Если задано значение 1, beat будет выполнять синхронизацию после отправки каждого сообщения задачи.
beat_max_loop_interval
По умолчанию: 0.
Максимальное количество секунд, которое beat может спать между проверками расписания.
Значение по умолчанию зависит от планировщика. Для планировщика Celery beat по умолчанию оно равно 300 (5 минут), а для планировщика базы данных https://pypi.org/project/django-celery-beat/ — 5 секунд, поскольку расписание может изменяться извне, и эти изменения необходимо учитывать.
При запуске Celery beat во встроенном режиме (-B) в потоке Jython максимальный интервал также переопределяется и устанавливается равным 1, чтобы завершение работы происходило своевременно.
beat_cron_starting_deadline
Добавлено в версии 5.3.
По умолчанию: None.
При использовании cron — количество секунд, на которое beat может заглянуть в прошлое, определяя, пора ли запускать задачу по расписанию cron. Если задано значение None, просроченные задания cron всегда запускаются немедленно.
Предупреждение
Настоятельно не рекомендуется задавать значение больше 3600 (1 часа).
beat_logfile
Добавлено в версии 5.4.
По умолчанию: None
Необязательный путь к файлу, в который celery beat будет записывать журнал (по умолчанию используется stdout).
beat_pidfile
Добавлено в версии 5.4.
По умолчанию: None
Необязательный путь к файлу, в котором celery beat создаст или сохранит PID-файл (по умолчанию PID-файл не создается).
beat_uid
Добавлено в версии 5.4.
По умолчанию: None
Необязательный идентификатор пользователя, который будет использоваться, когда celery beat сбрасывает привилегии (по умолчанию UID не меняется).
beat_gid
Добавлено в версии 5.4.
По умолчанию: None
Необязательный идентификатор группы, который будет использоваться, когда демон celery beat сбрасывает привилегии (по умолчанию GID не меняется).
beat_umask
Добавлено в версии 5.4.
По умолчанию: None
Необязательная маска umask, которая будет использоваться при создании файлов (журнала, PID-файла и т. д.) демоном celery beat.
beat_executable
Добавлено в версии 5.4.
По умолчанию: None
Необязательный путь к исполняемому файлу python, который будет использоваться celery beat при запуске в режиме демона (по умолчанию используется sys.executable).
Copyright © 2017-2026 Asif Saif Uddin, core team & contributors. All rights reserved.
Celery is licensed under The BSD License (3 Clause, also known as the new BSD license). The license is an OSI approved Open Source license and is GPL-compatible.
https://docs.celeryq.dev/en/stable/userguide/configuration.html