История изменений для Celery 2.4

2.4.5

дата выхода:

2011-12-02 05:00 GMT

релиз на:

Спросите Солема

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

  • Регистрация времени гуманизации в журнале ударов теперь более подробная.

  • Новый раздел Бэкенды и брокеры в части «Начало работы» Документации

    Это руководство заменяет старый учебник «Другие очереди» и добавляет документацию для MongoDB, Beanstalk и CouchDB.

2.4.4

дата выхода:

2011-11-25 04:00 pm. GMT

релиз на:

Спросите Солема

Исправления в системе безопасности

  • [Безопасность: CELERYSA-0001] Демоны устанавливали эффективные, а не реальные идентификаторы, когда использовались аргументы --uid/ --gid для celery multi, celeryd_detach, celery beat и celery events.

    Это означает, что привилегии не были сброшены должным образом, и что позже можно будет восстановить привилегии супервизора.

Исправления

  • Пул процессов: Исправлена редкая блокировка при выключении (проблема #523).

    Исправление внесено Ионелом Мариесом Кристианом.

  • Задания Webhook выдавали неправильные заголовки HTTP POST (проблема #515).

    Заголовок Content-Type был изменен с application/jsonapplication/x-www-form-urlencoded, и добавлен соответствующий заголовок Content-Length.

    Исправление внесено Митаром.

  • Учебник по демонизации: Добавляет пример конфигурации с использованием Django и virtualenv вместе (выпуск #505).

    При участии Хуана Игнасио Каталано.

  • generic init-скрипты теперь автоматически создают директории log и pid файлов (проблема #545).

    При участии Криса Стритера.

2.4.3

дата выхода:

2011-11-22 06:00 p.m. GMT

релиз на:

Спросите Солема

  • Исправлена опечатка импорта модуля в celeryctl (выпуск #538).

    Исправление внесено Крисом Стритером.

2.4.2

дата выхода:

2011-11-14 12:00. GMT

релиз на:

Спросите Солема

  • Программный модуль больше не использует относительный импорт, чтобы можно было сделать python -m celery.bin.name.

2.4.1

дата выхода:

2011-11-07 06:00 p.m. GMT

релиз на:

Спросите Солема

  • celeryctl inspect Команды не было выведено.

  • пул процессов: Уменьшите интервал опроса для меньшего использования ЦП вхолостую.

  • пул процессов: MaybeEncodingError не был обернут в ExceptionInfo (проблема #524).

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

  • логирование: Исправлена ошибка, при которой не удавалось записать юникод в перенаправленные сообщения журнала stdout (проблема #522).

2.4.0

дата выхода:

2011-11-04 04:00 pm. GMT

релиз на:

Спросите Солема

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

  • Теперь поддерживает Python 3.

  • Исправлена тупиковая ситуация при обработке рабочих процессов (проблема #496).

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

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

    Это обходной путь для http://bugs.python.org/issue6721#msg140215.

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

    Исправление внесено Хармом Верхагеном.

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

    Значение срока действия по умолчанию теперь берется из настройки CELERY_TASK_RESULT_EXPIRES.

    Старая настройка CELERY_AMQP_TASK_RESULT_EXPIRES была устаревшей и будет удалена в версии 4.0.

    Обратите внимание, что это означает, что бэкенд результатов требует RabbitMQ 2.1.0 или выше, и что вы должны отключить истечение срока действия, если вы работаете с более старой версией. Вы можете сделать это, отключив настройку CELERY_TASK_RESULT_EXPIRES:

    CELERY_TASK_RESULT_EXPIRES = None
    
  • Эвентлет: Исправлена проблема с выключением (выпуск #457).

  • Брокерские транспорты теперь можно указывать с помощью URL-адресов

    Теперь брокер может быть указан в виде URL. Этот URL должен иметь формат:

    transport://user:password@hostname:port/virtual_host
    

    например, брокер по умолчанию записывается как:

    amqp://guest:guest@localhost:5672//
    

    Схема обязательна, чтобы хост идентифицировался как URL, а не просто как имя хоста. Пользователь, пароль, порт и virtual_host являются необязательными и по умолчанию имеют значение по умолчанию для конкретного транспорта.

    Примечание

    Обратите внимание, что компонент пути (virtual_host) всегда начинается с прямой косой черты. Это необходимо для различения виртуального хоста '' (пустой) и '/', которые оба являются приемлемыми именами виртуальных хостов.

    Виртуальный хост '/' становится:

    amqp://guest:guest@localhost:5672//
    

    и виртуальный хост '' (пустой) становится:

    amqp://guest:guest@localhost:5672/
    

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

    Кроме того, параметр BROKER_URL был добавлен в качестве псевдонима для BROKER_HOST. Любая настройка брокера, указанная как в URL, так и в конфигурации, будет проигнорирована, если настройка не указана в URL, то значение из конфигурации будет использоваться по умолчанию.

    Также программы теперь поддерживают опцию --broker для указания URL брокера в командной строке:

    $ celery worker -b redis://localhost
    
    $ celery inspect -b amqp://guest:guest@localhost//e
    

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

  • Устаревшая функция celery.loaders.setup_loader() была удалена.

  • Настройка CELERY_TASK_ERROR_WHITELIST была заменена более гибким подходом (выпуск #447).

    Логика отправки почты с ошибками теперь доступна в виде Task.ErrorMail, с реализацией (для справки) в celery.utils.mail.

    Класс error mail может быть подклассифицирован для получения полного контроля над отправкой сообщений об ошибках, что устраняет необходимость в отдельной настройке белого списка.

    Параметр CELERY_TASK_ERROR_WHITELIST был устаревшим и будет полностью удален в версии 4.0.

  • Дополнительные амортизационные отчисления

    Следующие функции были устаревшими и планируются к удалению в версии 4.0:

    Старая функция

    Альтернатива

    celery.loaders.current_loader

    celery.current_app.loader

    celery.loaders.load_settings

    celery.current_app.conf

    celery.execute.apply

    Task.apply

    celery.execute.apply_async

    Task.apply_async

    celery.execute.delay_task

    celery.execute.send_task.

    Следующие параметры были устаревшими и планируются к удалению в версии 4.0:

    Старая обстановка

    Альтернатива

    CELERYD_LOG_LEVEL

    celery worker --loglevel=

    CELERYD_LOG_FILE

    celery worker --logfile=

    CELERYBEAT_LOG_LEVEL

    celery beat --loglevel=

    CELERYBEAT_LOG_FILE

    celery beat --logfile=

    CELERYMON_LOG_LEVEL

    celerymon --loglevel=

    CELERYMON_LOG_FILE

    celerymon --logfile=

Новости

  • Больше не зависит от pyparsing.

  • Теперь зависит от Kombu 1.4.3.

  • CELERY_IMPORTS теперь может быть скалярным значением (проблема #485).

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

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

    Предложено @jsaxon-cars.

  • Исправлена утечка памяти при использовании пула потоков (проблема #486).

    Внесен Корнелиусом Сурвилой.

  • statedb не было сохранено при выходе.

    Теперь это исправлено, и он должен снова запоминать ранее отозванные задания при включении --statedb.

  • Добавляет EMAIL_USE_TLS для включения безопасных SMTP-соединений (проблема #418).

    Внесено Стефаном Кьяртанссоном.

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

    • Отсутствующее обязательное поле выбрасывает InvalidTaskError

    • Отсутствующие args/kwargs считаются пустыми.

    При участии Криса Чемберлина.

  • Исправлено состояние гонки в celery.events.state (celerymon/celeryev), когда информация о задаче удалялась во время итерации по ней (проблема #501).

  • Бэкенды Cache, Cassandra, MongoDB, Redis и Tyrant теперь уважают настройку CELERY_RESULT_SERIALIZER (выпуск #435).

    Это означает, что только бэкенды баз данных (Django/SQLAlchemy) в настоящее время не поддерживают использование пользовательских сериализаторов.

    Внесено Стивом Морином

  • Вызовы логирования больше не форматируют сообщения вручную, а передают это системе логирования, чтобы инструменты вроде Sentry могли легче работать с сообщениями (выпуск #445).

    При участии Криса Адамса.

  • multi теперь поддерживает команду stop_verify для ожидания завершения процессов.

  • Кэш-бэкенд не работал, если ключ кэша имел юникод (проблема #504).

    Исправление внесено Нилом Чинтомби.

  • Добавлена новая настройка CELERY_RESULT_DB_SHORT_LIVED_SESSIONS, которая при включении отключает кэширование сессий SQLAlchemy (проблема #449).

    Внесено Лео Дираком.

  • Все бэкенды результатов теперь реализуют __reduce__, чтобы их можно было мариновать (выпуск #441).

    Исправление внесено Реми Ноэлем

  • multi не работал в Windows (проблема #472).

  • Настройки нового стиля CELERY_REDIS_* теперь имеют приоритет над старыми ключами настройки REDIS_* (выпуск #508).

    Исправление внесено Джошуа Гинзбергом

  • Generic beat init-script больше не устанавливает bash -e (проблема #510).

    Исправление внесено Роджером Ху.

  • Документировано, что Chords не работает хорошо с redis-server версий до 2.2.

    Внесено Дэном МакГи.

  • Настройка CELERYBEAT_MAX_LOOP_INTERVAL не была соблюдена.

  • inspect.registered_tasks переименовано в inspect.registered для согласованности названий.

    Предыдущее имя по-прежнему доступно в качестве псевдонима.

    При участии Мгера Мовсисяна

  • Worker регистрирует строковое представление args и kwargs без безопасных защит (проблема #480).

  • RHEL init-script: Изменен приоритет запуска рабочих.

    Приоритеты запуска/остановки по умолчанию для MySQL в RHEL следующие:

    # chkconfig: - 64 36
    

    Поэтому, если Celery использует базу данных в качестве брокера / хранилища сообщений, он должен быть запущен после того, как база данных запущена, иначе возникнут ошибки. Этот коммит изменяет приоритет в init-скрипте на:

    # chkconfig: - 85 15
    

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

    Внесено Юрием Викторовичем Зайцевым.

  • KeyValueStoreBackend.get_many не уважал аргумент timeout (проблема #512).

  • Опция beat/events --workdir не chdir(2) перед попыткой конфигурирования (проблема #506).

  • После отказа от поддержки 2.4 мы теперь можем правильно называть модули, так как можем использовать абсолютный импорт.

    Поэтому следующие внутренние модули были переименованы:

    celery.concurrency.evlet -> celery.concurrency.eventlet celery.concurrency.evg -> celery.concurrency.gevent

  • AUTHORS файл теперь отсортирован по алфавиту.

    Также, как вы могли заметить, авторы новых функций/исправлений теперь упоминаются в Changelog.

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