Что нового в Celery 4.4 (Cliffs)

Автор:

Асиф Саиф Уддин (auvipy at gmail.com)

Celery - это простая, гибкая и надежная структура распределенного программирования, позволяющая обрабатывать огромное количество сообщений, одновременно предоставляя операторам инструменты, необходимые для обслуживания распределенной системы с помощью python.

Это очередь задач, ориентированная на обработку в реальном времени, а также поддерживающая планирование задач.

Celery имеет большое и разнообразное сообщество пользователей и разработчиков, вам стоит присоединиться к нам on IRC или << 1 >>>.

Чтобы узнать больше о сельдерее, вам следует перейти по ссылке introduction.

Хотя эта версия обратно совместима с предыдущими версиями, важно, чтобы вы прочитали следующий раздел.

Эта версия официально поддерживается на CPython 2.7, 3.5, 3.6, 3.7 и 3.8, а также на PyPy2 и PyPy3.

Предисловие

Выпуск 4.4.0 продолжает совершенствовать наши усилия по предоставлению вам лучшей платформы для выполнения задач на Python.

Этот релиз получил кодовое название Cliffs, которое является одним из моих любимых треков.

Этот выпуск посвящен в основном исправлению ошибок и улучшению удобства использования для разработчиков. Были исправлены многие давние ошибки, проблемы с удобством использования, проблемы с документацией и незначительные улучшения, которые улучшают общий опыт разработчиков.

Celery 4.4 - это первый выпуск, поддерживающий Python 3.8 и pypy36-7.2.

Поскольку мы начинаем работу над Celery 5, следующим поколением нашей платформы для выполнения задач, ожидается еще как минимум 4.x до стабильного релиза Celery 5, и мы получим поддержку как минимум на 1 год в зависимости от спроса и поддержки сообщества.

Мы также сосредоточились на снижении трения при внесении вкладов и обновили инструменты для внесения вкладов.

- Асиф Саиф Уддин

Стена вкладчиков

Примечание

Эта стена была автоматически сгенерирована из истории git, поэтому, к сожалению, она не включает людей, которые помогают в более важных вещах, таких как ответы на вопросы списка рассылки.

Обновление с Celery 4.3

Пожалуйста, прочтите важные примечания ниже, так как есть несколько серьезных изменений.

Важные замечания

Поддерживаемые версии Python

Поддерживаются следующие версии Python:

  • CPython 2.7

  • CPython 3.5

  • CPython 3.6

  • CPython 3.7

  • CPython 3.8

  • PyPy2.7 7.2 (pypy2)

  • PyPy3.5 7.1 (pypy3)

  • PyPy3.6 7.2 (pypy3)

Отказано в поддержке Python 3.4

Для Celery теперь требуется либо Python 2.7, либо Python 3.5 и выше.

Python 3.4 достиг EOL в марте 2019 года. Чтобы сосредоточить наши усилия, мы отказались от поддержки Python 3.4 в этой версии.

Если вам все еще требуется запустить Celery с помощью Python 3.4, вы можете использовать Celery 4.3. Однако мы рекомендуем вам перейти на поддерживаемую версию Python, так как для Python 3.4 больше не будут применяться исправления безопасности.

Комбу

Начиная с этого выпуска, минимальная требуемая версия - Kombu 4.6.6.

Бильярд

Начиная с этого выпуска, минимальная требуемая версия - Billiard 3.6.1.

Redis Message Broker

Из-за многочисленных ошибок в предыдущих версиях redis-py, которые вызывали проблемы с Celery, мы были вынуждены увеличить минимально необходимую версию до 3.3.0.

Бэкенд результатов Redis

Из-за многочисленных ошибок в предыдущих версиях redis-py, которые вызывали проблемы с Celery, мы были вынуждены увеличить минимально необходимую версию до 3.3.0.

Бэкенд результатов DynamoDB

Бэкенд результатов DynamoDB получил поддержку TTL. В результате минимальная версия boto3 была увеличена до 1.9.178, которая является первой версией, поддерживающей TTL для DynamoDB.

Бэкенд результатов S3

Чтобы соответствовать текущим изменениям AWS API, минимальная версия boto3 была увеличена до 1.9.125.

SQS Message Broker

Чтобы соответствовать текущим изменениям AWS API, минимальная версия boto3 была увеличена до 1.9.125.

Конфигурация

CELERY_TASK_RESULT_EXPIRES был заменен на CELERY_RESULT_EXPIRES.

Новости

Пулы задач

Пул потоковых задач

Мы вновь ввели потоковый пул задач, используя concurrent.futures.ThreadPoolExecutor.

Предыдущий пул потоковых задач был экспериментальным. Кроме того, он был основан на пакете threadpool, который устарел.

Вы можете использовать новый пул потоковых задач, установив worker_pool> в „threads“ или передав `–pool threads“ команде `celery worker“.

Бэкенды результатов

Бэкенд результатов ElasticSearch

Поддержка базовой аутентификации HTTP

Теперь вы можете использовать базовую аутентификацию HTTP при использовании бэкенда результатов ElasticSearch, указывая имя пользователя и пароль в URI.

Ранее они игнорировались, и выдавались только неаутентифицированные запросы.

Бэкенд результатов MongoDB

Поддержка источника аутентификации и метода аутентификации

Теперь вы можете указать authSource и authMethod для MongoDB с помощью опций URI. Следующий URI делает именно это:

mongodb://user:password@example.com/?authSource=the_database&authMechanism=SCRAM-SHA-256

Подробную информацию о различных опциях см. в documentation.

Задачи

Определения классов задач теперь могут иметь атрибуты повторного выполнения

Теперь вы можете использовать autoretry_for, retry_kwargs, retry_backoff, retry_backoff_max и retry_jitter в задачах на основе классов:

class BaseTaskWithRetry(Task):
  autoretry_for = (TypeError,)
  retry_kwargs = {'max_retries': 5}
  retry_backoff = True
  retry_backoff_max = 700
  retry_jitter = False

Холст

Замена задач с нетерпением

Теперь вы можете вызывать self.replace() для задач, которые выполняются с нетерпением. Они будут работать точно так же, как и задачи, выполняемые асинхронно.

Цепочки групп

Цепочки групп больше не приводят к созданию одной группы.

Для объединения двух групп в одну использовалось следующее. Теперь они правильно выполняются одна за другой:

>>> result = group(add.si(1, 2), add.si(1, 2)) | group(tsum.s(), tsum.s()).delay()
>>> result.get()
[6, 6]
Вернуться на верх