История изменений для 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/json
⇒application/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.