История изменений

Этот документ содержит примечания к изменениям для выпусков с исправлениями в серии 4.3.x. Пожалуйста, посмотрите Что нового в Celery 4.3 (ревень) для обзора того, что нового в Celery 4.3.

4.3.1

дата выхода:

2020-09-10 13:00 UTC+3:00

релиз на:

Омер Кац

  • Ограничьте версию vine, чтобы она была ниже 5.0.0.

    При участии Омера Каца.

4.3.0

дата выхода:

2019-03-31 7:00 UTC+3:00

релиз на:

Омер Кац

  • Добавлена поддержка трансляции с использованием шаблона регулярного выражения или шаблона glob в несколько Pidbox’ов.

    Это позволяет вам проверять или пинговать несколько рабочих одновременно.

    При участии Дмитрия Малиновского и Джейсона Хелда.

  • Добавлена поддержка пакетов пространства имен PEP 420.

    Это позволяет загружать задачи из пакетов пространства имен.

    При участии Колина Уотсона.

  • Добавлено acks_on_failure_or_timeout в качестве настройки вместо опции только для задач.

    Эта информация отсутствовала в первоначальном PR, но теперь добавлена для полноты.

    При участии Омера Каца.

  • Добавлен сигнал task_received.

    При участии Омера Каца.

  • Исправлен сбой нашего CLI, который происходил у всех, кто использует Python < 3.6.

    Сбой произошел в acd6025 при использовании исключения ModuleNotFoundError, которое было введено в Python 3.6.

    При участии Омера Каца.

  • Исправлена ошибка, возникавшая при использовании бэкенда результатов Redis, когда для параметра result_expires установлено значение None.

    При участии Тони Ружа и Омера Каца.

  • Добавлена поддержка DNS seedlist connection format для бэкенда результатов MongoDB.

    Для этого требуется пакет dnspython, который будет установлен по умолчанию при установке зависимостей для бэкенда результатов MongoDB.

    Внесено Георгием Псаракисом.

  • Увеличьте минимальную версию eventlet до 0.24.1.

    Внесено Георгием Псаракисом.

  • Замените пакет msgpack-python на msgpack.

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

    При участии Даниэля Халера.

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

    Такие обработчики ошибок теперь возможны:

    from celery import Signature
    Signature(
      'bar', args=['foo'],
      link_error=Signature('msg.err', queue='msg')
    ).apply_async()
    
  • Дополнительные исправления и улучшения в поддержке SSL в брокере Redis и бэкенде результатов.

    При участии Джереми Коэна

Очистка кода, покрытие тестов и улучшение CI:

  • Омер Кац

  • Флориан Шарден

Документация Исправления по:

  • Омер Кац

  • Самуэль Хуанг

  • Амир Хоссейн Саид Мехр.

  • Дмитрий Литвинов.

4.3.0 RC2

дата выхода:

2019-03-03 9:30 UTC+2:00

релиз на:

Омер Кац

  • Бэкенд файловой системы: Добавлены содержательные сообщения об ошибках для бэкенда файловой системы.

    При участии Ларса Ринна.

  • Новый бэкенд результатов: Добавлен бэкенд ArangoDB.

    При участии Дилипа Вамси Мотури.

  • Django: Подготавливайте текущий рабочий каталог вместо добавления, чтобы каталог проекта имел приоритет над системными модулями, как и ожидалось.

    При участии Антонина Дельпеуха.

  • Увеличьте минимальную версию py-redis до 3.2.0.

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

    При участии Омера Каца.

  • Зависимости: Увеличьте минимально необходимую версию Kombu до 4.4

    При участии Омера Каца.

4.3.0 RC1

дата выхода:

2019-02-20 5:00 PM IST

релиз на:

Омер Кац

  • Канва: celery.chain.apply() больше не игнорирует аргументы ключевых слов при применении цепочки.

    При участии Корийна ван Голена.

  • Набор результатов: Не пытайтесь кэшировать результаты в celery.result.ResultSet.

    Во время соединения кэш результатов заполнялся с помощью celery.result.ResultSet.get(), если один из результатов содержал исключение, соединение неожиданно завершилось неудачей.

    Кэш результатов теперь удален.

    При участии Дерека Харланда

  • Приложение: celery.Celery.autodiscover_tasks() теперь пытается импортировать сам пакет, когда аргумент ключевого слова related_name равен None.

    При участии Алекса Иоаннидиса.

  • Поддержка Windows: В Windows 10 неактуальные PID-файлы мешали запуску celery beat. Теперь мы удаляем их при появлении сообщения SystemExit.

    Внесено <<<0 >>>.

  • Задача: Добавлена новая настройка task_acks_on_failure_or_timeout.

    Квитирование сообщений SQS при сбое или тайм-ауте делает невозможным использование очередей «мертвых букв».

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

    При участии Марио Костелака.

  • RabbitMQ Broker: Настройте заголовки HA для работы на RabbitMQ 3.x.

    Это изменение также означает, что мы прекращаем официальную поддержку RabbitMQ 2.x.

    При участии Асифа Саифа Уддина.

  • Командная строка: Улучшена обработка ошибок celery update.

    Внесено Федерико Бондом.

  • Канвас: Поддержка аккордов с task_always_eager, установленных на True.

    При участии Акселя Хаустанта.

  • Бэкенд результатов: Опционально храните свойства задачи в бэкенде результатов.

    Установка параметра конфигурации result_extended в значение True позволяет хранить дополнительные свойства задачи в бэкенде результатов.

    При участии Джона Арнольда.

  • Бэкенд результатов Couchbase: Разрешите бэкенду результатов Couchbase автоматически определять формат сериализации.

    При участии Дугласа Роде.

  • Новый бэкенд результатов: Добавлен бэкенд результатов Azure Block Blob Storage.

    Бэкэнд реализован на базе библиотеки azure-storage, которая использует Azure Blob Storage для масштабируемого недорогого PaaS бэкэнда.

    Бэкэнд был протестирован на нагрузку с помощью простого приложения nginx/gunicorn/sanic, размещенного на виртуальной машине DS4 (4 vCore, 16 ГБ RAM), и смог выдержать 600+ одновременных пользователей при ~170 RPS.

    Коммит также содержит живой сквозной тест для проверки функциональности бэкенда. Тест активируется путем установки переменной окружения AZUREBLOCKBLOB_URL в значение azureblockblob://{ConnectionString}, где значение ConnectionString можно найти в панели Access Keys ресурсов учетной записи хранения в Azure Portal.

    Внесено Клеменсом Вольфом.

  • Задача: celery.app.task.update_state() теперь принимает аргументы в виде ключевых слов.

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

    При участии Кристофера Дигнама.

  • Грациозная обработка потребителя kombu.exceptions.DecodeError.

    При использовании протокола v2 рабочий больше не падает, когда потребитель сталкивается с ошибкой при декодировании сообщения.

    При участии Стивена Скляра.

  • Развертывание: Исправьте остановку службы init.d.

    При участии Маркуса МакХейла

  • Django: Прекращена поддержка Django < 1.11.

    При участии Асифа Саифа Уддина.

  • Django: Удалите старый загрузчик djcelery.

    При участии Асифа Саифа Уддина.

  • Бэкенд результатов: celery.worker.request.Request теперь передает celery.app.task.Context в функции store_result бэкенда.

    Поскольку в настоящее время класс передает self этим функциям, отзыв задания приводил к повреждению данных о результатах задания при использовании django-celery-results.

    Внесено Киёхиро Ямагучи.

  • Рабочий: Повторите попытку, если соединение с пульсом разрывается.

    Ранее мы продолжали пытаться писать в разорванное соединение. Это приводит к утечке памяти, поскольку диспетчер событий будет продолжать добавлять сообщение в исходящий буфер.

    При участии Рафа Гинса.

  • Celery Beat: Работайте с микросекундами при составлении расписания.

    Внесено К Дэвисом

  • Asynpool: Исправлен тупик при закрытии сокета.

    При попытке закрыть сокет, celery.concurrency.asynpool.AsynPool удалял из концентратора только писателя очереди, но не удалял читателя. Это привело к тупику на дескрипторе файла, и в итоге рабочий перестал принимать новые задания.

    Теперь мы закрываем дескрипторы файлов читателя и писателя за одну итерацию цикла, что предотвращает тупик.

    При участии Джошуа Энгельмана.

  • Celery Beat: Правильно учитывайте часовой пояс при расчете метки времени.

    Внесено <<<0 >>>.

  • Celery Beat: celery.beat.Scheduler.schedules_equal() теперь может обрабатывать любой из аргументов, являющийся значением None.

    Внесено <<<0 >>>.

  • Документация/Sphinx: Исправлена поддержка Sphinx для декорированных функций shared_task.

    При участии Джона Банафато

  • Новый бэкенд результатов: Добавлен бэкенд результатов CosmosDB.

    Это изменение добавляет новый бэкенд результатов. Бэкенд реализован на базе библиотеки pydocumentdb, которая использует Azure CosmosDB для масштабируемого, глобально реплицируемого, высокопроизводительного, с низкой задержкой и высокой пропускной способностью бэкенда PaaS.

    Внесено Клеменсом Вольфом.

  • Приложения: Добавлены параметры конфигурации, позволяющие запускать несколько приложений на одном хосте RabbitMQ.

    Недавно добавленные опции конфигурации event_exchange и << 1 >>> позволяют пользователям использовать отдельный обмен Pidbox и отдельный обмен событиями.

    Это позволяет разным приложениям Celery работать отдельно на одном vhost.

    При участии Артема Васильева.

  • Бэкэнд результатов: Забывать метаданные родительского результата при забывании результата.

    Внесено <<<0 >>>.

  • Задача Храните аргументы задачи внутри celery.exceptions.MaxRetriesExceededError.

    При участии Антони Рухье.

  • Бэкэнд результатов: Добавлена настройка result_accept_content.

    Эта функция позволяет настроить различное принимаемое содержимое для бэкенда результатов.

    Для подписанных сообщений используется специальный сериализатор (auth), однако сериализатор результатов остается в формате json, поскольку мы не хотим иметь зашифрованное содержимое в бэкенде результатов.

    Чтобы принимать неподписанное содержимое из бэкенда результатов, мы ввели этот новый параметр конфигурации для указания принимаемого содержимого из бэкенда.

    При участии Бенджамина Перето.

  • Канвас: Исправлена обработка обратного вызова ошибки для задач на основе классов.

    При участии Виктора Миреева.

  • Новый бэкенд результатов: Добавлен бэкенд результатов S3.

    Внесено Флорианом Шарденом.

  • Задача: Добавлена поддержка Cythonized Celery задач.

    При участии Андрея Скабелина.

  • Riak Result Backend: Предупреждение пользователей бэкенда Riak о возможной несовместимости с Python 3.7.

    Внесено Георгием Псаракисом.

  • Python Runtime: Добавлена поддержка Python 3.7.

    При участии Омера Каца и Асифа Саифа Уддина.

  • Сериализатор аутентификации: Переработан сериализатор аутентификации.

    Сериализатор auth был полностью переработан. Ранее он был ужасно сломан.

    Теперь мы зависим от криптографии вместо pyOpenSSL для этого сериализатора.

    При участии Бенджамина Перето.

  • Командная строка: celery report теперь сообщает версию ядра вместе с другими деталями платформы.

    При участии Омера Каца.

  • Канвас: Исправлены аккорды с цепочками, которые включают суб-аккорды в группу.

    Теперь Celery правильно выполняет последнее задание в этих типах полотен:

    c = chord(
      group([
          chain(
              dummy.si(),
              chord(
                  group([dummy.si(), dummy.si()]),
                  dummy.si(),
              ),
          ),
          chain(
              dummy.si(),
              chord(
                  group([dummy.si(), dummy.si()]),
                  dummy.si(),
              ),
          ),
      ]),
      dummy.si()
    )
    
    c.delay().get()
    

    Внесено Максимильеном Куони.

  • Канвас: Сложные холсты с обратными вызовами ошибок больше не вызывают ошибку AttributeError.

    Очень сложные полотна, такие как this, больше не вызывают ошибку AttributeError, которая препятствует их построению.

    Мы пока не знаем, почему возникает эта ошибка.

    При участии Мануэля Васкеса Акосты.

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

    Ранее сельдерей разбивался в виде исключения.

    Теперь мы выводим правильное сообщение об ошибке.

    При участии Омера Каца.

  • Задача: Добавлена настройка task_default_priority.

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

    Внесено <<<0 >>>.

  • Зависимости: Увеличьте минимально необходимую версию Kombu до 4.3 и Billiard до 3.6.

    При участии Асифа Саифа Уддина.

  • Бэкэнд результатов: Устраните утечку памяти.

    Мы снова ввели слабые ссылки на связанные методы для обещаний обратного вызова AsyncResult, после добавления полной поддержки weakref для Python 2 в vine. Более подробную информацию можно найти в celery/celery#4839.

    При участии Георгия Псаракиса и <<<0 >>>.

  • Выполнение задач: Исправлена сериализация по кругу для нетерпеливых задач.

    При выполнении сериализации в обе стороны для нетерпеливых задач сериализатор задачи всегда будет JSON, если в вызове celery.app.task.Task.apply_async() не присутствует аргумент serializer. Если аргумент serializer присутствует, но имеет значение „pickle““, будет вызвано исключение, так как объекты, сериализованные в pickle, не могут быть десериализованы без указания в `serialization.loads, какие типы содержимого должны быть приняты. Похоже, что для Producer’s serializer установлено значение None, что приводит к сериализации JSON по умолчанию.

    Теперь мы продолжаем использовать (по порядку) аргумент serializer в celery.app.task.Task.apply_async(), если он присутствует, или сериализатор Producer, если он не None. Если сериализатор Producer равен None, то в качестве сериализатора будет использоваться конфигурационная запись приложения Celery task_serializer.

    При участии Бретта Джексона

  • Redis Result Backend: Класс celery.backends.redis.ResultConsumer больше не предполагает, что celery.backends.redis.ResultConsumer.start() будет вызван до celery.backends.redis.ResultConsumer.drain_events().

    Это исправляет состояние гонки при использовании пула рабочих Gevent.

    При участии Ноама Куша

  • Задача: Добавлена настройка task_inherit_parent_priority.

    Установка опции конфигурации task_inherit_parent_priority в True заставит задачи Celery наследовать приоритет предыдущей связанной с ней задачи.

    Примеры:

    c = celery.chain(
      add.s(2), # priority=None
      add.s(3).set(priority=5), # priority=5
      add.s(4), # priority=5
      add.s(5).set(priority=3), # priority=3
      add.s(6), # priority=3
    )
    
    @app.task(bind=True)
    def child_task(self):
      pass
    
    @app.task(bind=True)
    def parent_task(self):
      child_task.delay()
    
    # child_task will also have priority=5
    parent_task.apply_async(args=[], priority=5)
    

    Внесено <<<0 >>>.

  • Канвас: Добавлена настройка result_chord_join_timeout.

    Ранее celery.result.GroupResult.join() имел фиксированный тайм-аут в 3 секунды.

    Настройка result_chord_join_timeout теперь позволяет изменить его.

    Внесено <<<0 >>>.

Очистка кода, покрытие тестов и улучшение CI:

  • Джон Дюфрейн

  • Асиф Саиф Уддин.

  • Омер Кац

  • Бретт Джексон

  • Бруно Алла

  • :github_user:`tothegump`

  • Боян Йованович

  • Флориан Шарден

  • :github_user:`walterqian`

  • Фабиан Беккер

  • Ларс Ринн

  • :github_user:`madprogrammer`

  • Киаран Кортни

Документация Исправления по:

  • Льюис М. Кабуи.

  • Дэш Уинтерсон

  • Шанавас М

  • Бретт Рэндалл

  • **Промышленная Сулига

  • **Джошуа Шмид

  • Асиф Саиф Уддин.

  • ** Сяодун

  • Викас Прасад

  • Джейми Алессио

  • Ларс Крузе

  • Гильерме Каминья

  • Андреа Раббаглиетти

  • Итай Биттан

  • Ноа Холл

  • Пэн Вэйкан

  • Мариатта Виджая

  • Эд Морли

  • Павел Адамчак.

  • :github_user:`CoffeeExpress`

  • :github_user:`aviadatsnyk`

  • Брайан Шрейдер

  • Хосуэ Баландрано Коронель.

  • Том Клэнси

  • **Себастьян Войцеховски

  • Мейсам Азад.

  • **Виллем Тиарт

  • Чарльз Чан

  • Омер Кац

  • Милинд Шакья

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