Что нового в Celery 5.1 (Солнечная гармоника)

Автор:

Хосуэ Баландрано Коронель (jbc at rmcomplexity.com)

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

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

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

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

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

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

Предисловие

Выпуск 5.1.0 - это новый минорный выпуск для Celery.

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

Релизы в серии 5.x имеют кодовые названия в честь песен Jon Hopkins. Этот релиз получил кодовое название Sun Harmonics.

С этого момента мы поддерживаем только Python 3.6 и выше. Мы будем поддерживать совместимость с Python 3.6 до его выхода из эксплуатации в декабре 2021 года.

- Омер Кац

Политика долгосрочной поддержки

Поскольку мы хотим предоставить вам время для перехода, мы объявляем Celery 4.x релизом LTS. Celery 4.x будет поддерживаться до 1 августа 2021 года.

Мы будем принимать и применять исправления для устранения ошибок и проблем безопасности. Однако никаких новых функций в эту версию вноситься не будет.

Celery 5.x не является релизом LTS. Мы будем поддерживать его до выхода Celery 6.x.

Мы находимся в процессе определения нашей политики долгосрочной поддержки. Следите за обновлениями в следующем документе «Что нового».

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

0xflotus <0xflotus@gmail.com> AbdealiJK <abdealikothari@gmail.com> Anatoliy <apeks37@yandex.ru> Anna Borzenko <aaa-nn-a@mail.ru> aruseni <aruseni.magiku@gmail.com> Asif Saif Uddin (Auvi) <auvipy@gmail.com> Asif Saif Uddin <auvipy@gmail.com> Awais Qureshi <awais.qureshi@arbisoft.com> careljonkhout <carel.jonkhout@gmail.com> Christian Clauss <cclauss@me.com> danthegoodman1 <xxdanthegoodmanxx@gmail.com> Dave Johansen <davejohansen@gmail.com> David Schneider <schneidav81@gmail.com> Fahmi <fahmimodelo@gmail.com> Felix Yan <felixonmars@archlinux.org> Gabriel Augendre <gabriel@augendre.info> galcohen <gal.cohen@autodesk.com> gal cohen <gal.nevis@gmail.com> Geunsik Lim <leemgs@gmail.com> Guillaume DE SUSANNE D’EPINAY <guillaume.desusanne@ssi.gouv.fr> Хильмар Хильмарссон <hilmarh@gmail.com> Илия Волочий <illia.volochii@gmail.com> jenhaoyang <randy19962@gmail.com> Джонатан Стоппани <jonathan@stoppani.name> Хосуэ Баландрано Коронель <jbc@rmcomplexity.com> kosarchuksn <sergeykosarchuk@gmail.com> Костя Деев <kostya.deev@bluware.com> Мэтт Хоффман <mjhoffman65@gmail.com> Матус Вало <matusvalo@gmail.com> Myeongseok Seo <clichedmoog@gmail.com> Noam <noamkush@gmail.com> Omer Katz <omer.drow@gmail.com> pavlos kallis <pakallis@gmail.com> Pavol Plaskoň <pavol.plaskon@gmail.com> Pengjie Song (宋鹏捷) <spengjie@sina.com> Sardorbek Imomaliev <sardorbek.imomaliev@gmail.com> Sergey Lyapustin <s.lyapustin@gmail.com> Sergey Tikhonov <zimbler@gmail.com> Stephen J. Fuhry <steve@tpastream.com> Swen Kooij <swen@sectorlabs.ro> tned73 <edwin@tranzer.com> Tomas Hrnciar <thrnciar@redhat.com> tumb1er <zimbler@gmail.com>

Примечание

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

Обновление с Celery 4.x

Шаг 1: Настройте вызов командной строки

Celery 5.0 представляет новую реализацию CLI, которая не полностью обратно совместима.

Глобальные опции больше не могут располагаться после подкоманды. Вместо этого они должны быть расположены как опция для команды celery, как показано ниже:

celery --app path.to.app worker

Если вы использовали наше руководство Демонизация для развертывания Celery в производстве, вам следует пересмотреть его на предмет обновлений.

Шаг 2: Обновите конфигурацию с новыми именами параметров

Если вы еще не обновили свою конфигурацию при переходе на Celery 4.0, пожалуйста, сделайте это сейчас.

Мы решили продлить период устаревания до версии 6.0, поскольку мы не стали громко предупреждать об использовании этих устаревших настроек.

Инструкции см. в разделе migration guide.

Шаг 3: Прочитайте важные примечания в этом документе

Убедитесь, что вы не затронуты ни одним из важных замечаний по обновлению, упомянутых в following section.

Вы должны убедиться, что ни одно из изменений в CLI не затрагивает вас. Пожалуйста, обратитесь к New Command Line Interface для получения подробной информации.

Шаг 4: Перенесите свой код на Python 3

Celery 5.x поддерживает только Python 3. Поэтому вы должны убедиться, что ваш код совместим с Python 3.

Если вы еще не перенесли свой код на Python 3, вы должны сделать это до обновления.

Вы можете использовать такие инструменты, как 2to3 и << 1 >>>, чтобы помочь вам в этой работе.

После завершения миграции запустите набор тестов с Celery 4, чтобы убедиться, что ничего не было нарушено.

Шаг 5: Обновление до Celery 5.1

В этот момент вы можете обновить своих работников и клиентов новой версией.

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

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

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

  • CPython 3.6

  • CPython 3.7

  • CPython 3.8

  • CPython 3.9

  • PyPy3.6 7.2 (pypy3)

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

Комбу

Начиная с версии 5.1, минимальная требуемая версия - Kombu 5.1.0.

Бильярд

Начиная с версии 5.1, минимальная требуемая версия - Billiard 3.6.4.

Важные замечания по версии 5.0

Прекращена поддержка Python 2.7 и 3.5

Для Celery теперь требуется Python 3.6 и выше.

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

Кроме того, Python 3.5 достиг EOL в сентябре 2020 года. Поэтому мы также прекращаем поддержку Python 3.5.

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

Пул работников эвентов

Из-за eventlet/eventlet#526 минимально необходимая версия - eventlet 0.26.1.

Пул работников Gevent

Начиная с версии 5.0, минимальная требуемая версия - gevent 1.0.0.

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

Бэкенд результатов Couchbase теперь использует V3 Couchbase SDK.

В результате мы больше не поддерживаем Couchbase Server 5.x.

Также, начиная с версии 5.0, минимальная необходимая версия клиента базы данных - couchbase 3.0.0.

Чтобы убедиться, что ваш Couchbase Server совместим с V3 SDK, обратитесь к их documentation.

Riak Result Backend

Бэкэнд результатов Riak был удален, так как база данных больше не поддерживается.

Клиент Python поддерживает только Python 3.6 и ниже, что не позволяет нам поддерживать его, а также он не поддерживается.

Если вы все еще используете Riak, воздержитесь от обновления до Celery 5.0, пока вы переносите свое приложение на другую базу данных.

Мы приносим извинения за отсутствие предварительного уведомления, но мы считаем, что вероятность того, что вас затронет это изменение, минимальна, поэтому мы и сделали это.

AMQP Result Backend

Бэкенд результатов AMQP был удален, поскольку он был устаревшим в версии 4.0.

Удаленные устаревшие модули

Модули celery.utils.encoding и celery.task были устаревшими в версии 4.0 и поэтому удалены в 5.0.

Если вы ранее использовали модуль celery.utils.encoding, то вместо него вам следует импортировать kombu.utils.encoding.

Если до этого вы использовали модуль celery.task, то вместо него вам следует импортировать непосредственно из модуля celery.

Теперь требуется azure-servicebus 7.0.0

Учитывая изменения в SDK между 0.50.0 и 7.0.0, Kombu прекращает поддержку старых версий azure-servicebus.

Новости

Поддержка Azure Service Bus 7.0.0

В Kombu v5.1.0 мы теперь поддерживаем Azure Services Bus.

Azure полностью изменила Azure ServiceBus SDK между 0.50.0 и 7.0.0. azure-servicebus >= 7.0.0 теперь требуется для Kombu 5.1.0.

Добавить поддержку SQLAlchemy 1.4

После изменений в SQLAlchemy 1.4 декларативная база больше не является расширением. Импорт ее из sqlalchemy.ext.declarative устарел и будет удален в SQLAlchemy 2.0.

Поддержка аутентификации имени пользователя Redis

Ранее имя пользователя игнорировалось из URI. Начиная с Redis>=6.0, этого не должно происходить, поскольку появилась поддержка ACL.

Подробности см. в разделе documentation.

Транспорт SQS - поддержка политики отката

SQS теперь поддерживает управляемый таймаут видимости. Это позволяет нам реализовать политику отката (например, экспоненциальную политику), которая означает, что время между отказами задач будет динамически изменяться в зависимости от количества повторных попыток.

Документация: reference/kombu.transport.SQS.rst

Дублирование успешных задач

Функция трассировки получает метаданные из бэкенда каждый раз, когда получает задание, и сравнивает его состояние. Если состояние равно SUCCESS, мы регистрируемся и выходим из системы вместо выполнения задачи. Задача подтверждается, и дальше все идет нормально.

Документация: worker_deduplicate_successful_tasks

Прерывание заданий с поздним подтверждением при потере соединения

Задачи с поздним подтверждением продолжают выполняться после перезапуска, хотя связь потеряна и они больше не могут быть подтверждены. Теперь эти задачи будут завершены.

Документация: worker_cancel_long_running_tasks_on_connection_loss

task.apply_async(ignore_result=True) теперь позволяет избежать сохранения результата

task.apply_async теперь поддерживает передачу ignore_result, которая будет действовать так же, как и использование @app.task(ignore_result=True).

Используйте потокобезопасную реализацию cached_property.

cached_property активно используется в celery, но он вызывает проблемы в многопоточном коде, поскольку не является потокобезопасным. Теперь Celery использует потокобезопасную реализацию cached_property.

Задачи теперь могут иметь необходимые kwargs в любом порядке

Задачи теперь могут быть определены следующим образом:

SQS - поддержка аутентификации STS с AWS

Токен STS требует обновления через определенный период времени. После достижения sts_token_timeout будет создан новый токен.

Документация: getting-started/backends-and-brokers/sqs.rst

Поддержка Redis health_check_interval.

Интервал health_check_interval может быть настроен и будет передан в redis-py.

Документация: redis_backend_health_check_interval

Обновите версию протокола pickle по умолчанию до 4

Версия протокола pickle была обновлена, чтобы позволить Celery сериализовать большие строки и другие преимущества.

См.: https://docs.python.org/3.9/library/pickle.html#data-stream-format

Поддержка Redis Sentinel с SSL

Более подробную информацию см. в документации: getting-started/backends-and-brokers/redis.rst

Вернуться на верх