История изменений для Celery 3.0¶
Если вы ищете версии до 3.0.x, вам следует перейти по ссылке История.
3.0.24¶
- дата выхода:
2013-10-11 04:40 p.m. БСТ
- релиз на:
Спросите Солема
Теперь зависит от Kombu 2.5.15.
Теперь зависит от billiard версии 2.7.3.34.
Бэкенд AMQP Result: Больше не кэширует объявления очередей.
Очереди, создаваемые бэкендом результатов AMQP, всегда уникальны, поэтому кэширование объявлений приводило к медленной утечке памяти.
Рабочий: Исправлена ошибка, когда имя хоста содержало символы Unicode.
Внесен Даодао.
Рабочий больше не запускался, если был выбран пул -P solo (проблема #1548).
Бэкенды результатов Redis/Cache не завершали аккорды, если любое из заданий повторялось (проблема #1401).
Декоратор задач больше не ленится, если приложение завершено.
AsyncResult: Исправлена ошибка с
copy(AsyncResult)
при отсутствииcurrent_app
.ResultSet: Теперь правильно распространяет приложение при передаче строковых идентификаторов.
Загрузчик теперь игнорирует
CELERY_CONFIG_MODULE
, если значение является пустой строкой.Исправлено состояние гонки в объекте Proxy, когда он пытался удалить атрибут дважды, что приводило к появлению
AttributeError
.Методы задач теперь работают с настройкой
CELERY_ALWAYS_EAGER
(проблема #1478).Очереди
Broadcast
были случайно объявлены при публикации задач (проблема #1540).Новая переменная окружения
C_FAKEFORK
может быть использована для отладки init-скриптов.Установка этого параметра пропустит шаг демонизации, чтобы можно было увидеть ошибки, выводимые на stderr после закрытия стандартных выходов:
$ C_FAKEFORK /etc/init.d/celeryd start
Это работает с командой celery multi в целом.
get_pickleable_etype
не всегда возвращало значение (проблема #1556).Исправлена ошибка, при которой
app.GroupResult.restore
возвращалось к приложению по умолчанию.Исправлена редкая ошибка, при которой встроенные задачи использовали текущее_приложение.
maybe_fileno()
теперь обрабатываетValueError
.
3.0.23¶
- дата выхода:
2013-09-02 01:00 p.m. БСТ
- релиз на:
Спросите Солема
Теперь зависит от Kombu 2.5.14.
send_task
не выполнил аргументыlink
и << 2 >>>.Это имело побочный эффект: цепочки не вызывали незарегистрированные задачи, молча отбрасывая их.
Исправление внесено Тейлором Нельсоном.
celery.state
: Оптимизирован поиск старшинства.При участии Мэтта Робенолта.
POSIX: Демонизация не перенаправляла
sys.stdin
на/dev/null
.Исправление внесено Александром Смирновым.
Canvas: ошибка в группе приводила к возврату к приложению по умолчанию при использовании
.apply_async
(проблема #1516)Canvas: аргументы генератора не всегда были pickleable.
3.0.22¶
- дата выхода:
2013-08-16 04:30 p.m. BST
- релиз на:
Спросите Солема
Теперь зависит от Kombu 2.5.13.
Теперь зависит от billiard 2.7.3.32
Исправлена ошибка с месячными и годовыми кронтабами (выпуск #1465).
Исправление внесено Гийомом Говритом.
Исправлена утечка памяти, вызванная временными ограничениями (Выпуск #1129, Выпуск #1427)
Worker теперь будет засыпать при перезапуске более 5 раз за одну секунду, чтобы избежать спама событиями
worker-online
.Включает исправления в документации
Вклад внесли: Кен Фромм, Андреас Саввидис, Алекс Кирюха, Майкл Фладишер.
3.0.21¶
- дата выхода:
2013-07-05 04:30 p.m. BST
- релиз на:
Спросите Солема
Теперь зависит от billiard 2.7.3.31.
В этой версии исправлена ошибка при запуске без расширения billiard C.
В версии 3.0.20 нарушена поддержка eventlet/gevent (рабочий не запускается).
Исправлена проблема утечки памяти, когда бэкенд результатов MongoDB использовался с пулом gevent.
Исправление внесено Россом Лоули.
3.0.20¶
- дата выхода:
2013-06-28 04:00 p.m. БСТ
- релиз на:
Спросите Солема
Содержит обходной путь для решения проблем с тупиковыми ситуациями.
Лучшее решение станет частью Celery 3.1.
Теперь зависит от Kombu 2.5.12.
Теперь зависит от billiard 2.7.3.30.
Аргумент
--loader
больше не поддерживал импорт загрузчиков из текущего каталога.[Worker] Исправлена утечка памяти при перезапуске после потери соединения (проблема #1325).
[Worker] Исправлена ошибка UnicodeDecodeError при запуске (проблема #1373).
Исправление внесено Джессикой Таллон.
[Worker] Теперь снова корректно переписывает нераспаковываемые исключения.
Исправлено возможное состояние гонки при выселении элементов из отозванного набора задач.
[generic-init.d] Исправлена совместимость с минимальной оболочкой Dash в Ubuntu (проблема #1387).
Исправление внесено @monkut.
Task.apply
/ALWAYS_EAGER
теперь также выполняет обратные вызовы и эрбэки (проблема #1336).[Worker] Сигнал
worker-shutdown
больше не отправлялся (проблема #1339)j[Python 3] Исправлена проблема с threading.Event.
Исправление внесено Ксавье Ордоки.
[Python 3] Теперь обрабатывает
io.UnsupportedOperation
, который может быть поднятfile.fileno()
в Python 3.[Python 3] Исправлена проблема с
qualname
.[events.State] Теперь игнорируются неизвестные группы событий.
[Бэкенд MongoDB] Больше не используется устаревший параметр
safe
.Исправление внесено @rfkrocktk.
Пул эвентов теперь импортируется в Windows.
[Canvas] Исправлена ошибка, при которой неизменяемые члены аккорда могли получать аргументы (проблема #1340).
Исправление внесено Питером Бруком.
Цепочка [Canvas] теперь снова принимает аргумент генератора (проблема #1319).
Команда
celery.migrate
теперь потребляет из всех очередей, если очереди не указаны.Исправление внесено Джоном Уотсоном.
3.0.19¶
- дата выхода:
2013-04-17 04:30:00 p.m. БСТ
- релиз на:
Спросите Солема
Теперь зависит от billiard 2.7.3.28
Исправление, связанное с Python 3, смогло отключить исправление тупиковой ситуации, объявленное в версии 3.0.18.
Были добавлены тесты, чтобы убедиться, что это не повторится.
Политика повторных попыток выполнения заданий: По умолчанию max_retries теперь равно 3.
Это гарантирует, что клиенты не останутся в подвешенном состоянии, пока брокер не работает.
Примечание
Вы можете установить более длительный повтор для рабочего с помощью сигнала
celeryd_after_setup
:from celery.signals import celeryd_after_setup @celeryd_after_setup.connect def configure_worker(instance, conf, **kwargs): conf.CELERY_TASK_PUBLISH_RETRY_POLICY = { 'max_retries': 100, 'interval_start': 0, 'interval_max': 1, 'interval_step': 0.2, }
Рабочий: Теперь будет правильно отображать тело сообщения в сообщениях об ошибках, даже если тело является экземпляром буфера.
В версии 3.0.18 был сломан бэкенд результатов MongoDB (проблема #1303).
3.0.18¶
- дата выхода:
2013-04-12 05:00:00 BST
- релиз на:
Спросите Солема
Теперь зависит от kombu 2.5.10.
См. kombu changelog.
Теперь зависит от billiard 2.7.3.27.
Теперь можно указать белый список принимаемых сериализаторов с помощью новой настройки
CELERY_ACCEPT_CONTENT
.Это означает, что вы можете заставить рабочий отбрасывать сообщения, сериализованные с помощью pickle и других ненадежных сериализаторов. Например, чтобы разрешить только сериализованные сообщения JSON, используйте:
CELERY_ACCEPT_CONTENT = ['json']
вы также можете указать типы MIME в белом списке:
CELERY_ACCEPT_CONTENT = ['application/json']
Исправлена тупиковая ситуация в пуле мультипроцессора, вызванная тем, что семафор не освобождался при завершении работы по сигналу.
Пул процессов: Теперь можно отлаживать процессы пула с помощью GDB.
celery report
теперь цензурирует возможно секретные настройки, такие как пароли и секретные маркеры.Прежде чем вставлять что-либо в Интернет, следует проверить вывод.
URL-адреса подключения теперь игнорируют множественные маркеры „+“.
Worker/
statedb
: Теперь используется протокол pickle 2 (Python 2.5+).Исправлены проблемы совместимости с Python 3.
Рабочий: Теперь выдается предупреждение, если рабочий запускается с тем же именем узла, что и существующий рабочий.
Рабочий: Исправлена тупиковая ситуация, которая могла возникнуть при отзыве заданий (проблема #1297).
Worker: Обработчик
HUP
теперь закрывает все открытые дескрипторы файлов перед перезапуском, чтобы исключить утечку дескрипторов файлов (проблема #1270).Рабочий: Оптимизировано хранение/загрузка списка отозванных заданий (проблема #1289).
После этого изменения файл
celery worker --statedb
будет занимать больше места на диске, но загрузка из и хранение отозванных задач будет значительно быстрее (то, что раньше занимало 5 минут, теперь будет занимать меньше секунды).Celery теперь будет предлагать альтернативы, если в имени транспорта брокера допущена опечатка (например,
ampq
->amqp
).Рабочий: Автозагрузка приводила к сбою, если отслеживаемый файл был отсоединен.
Фикс предоставлен компанией Agris Ameriks.
Исправлена ошибка сбора AsyncResult.
Исправление внесено Томасом Минором.
Исправлена обработка Unicode в выводе журнала при использовании цветов журнала (проблема #427).
ConfigurationView
теперь являетсяMutableMapping
.При участии Аарона Харнли.
Исправлена утечка памяти в реализации кэша LRU.
Исправление внесено Ромуальдом Брюне.
celery.contrib.rdb
: Теперь работает, когда сокеты находятся в неблокирующем режиме.Исправление внесено Тео Спирсом.
Команда удаленного управления inspect reserved включала активные (запущенные) задачи вместе с зарезервированными задачами (выпуск #1030).
Сигнал
task_failure
получал модифицированный объект трассировки, предназначенный для целей травления, это было исправлено, и теперь он получает реальную трассировку.Декоратор
@task
молча игнорировал позиционные аргументы, теперь вместо них он выдает ожидаемыйTypeError
(проблема #1125).Теперь работник будет правильно обрабатывать сообщения с недействительными полями ETA/expires (проблема #1232).
Команда дистанционного управления
pool_restart
теперь сообщает об ошибке, если параметрCELERYD_POOL_RESTARTS
не установлен.add_defaults`()
теперь можно использовать с объектами не-dict.Исправлены проблемы совместимости в классе Proxy (выпуск #1087).
Атрибуты класса
__module__
,__name__
и__doc__
теперь являются осмысленными строковыми объектами.Спасибо Мариусу Гедминасу.
Бэкенд MongoDB: Настройка
MONGODB_BACKEND_SETTINGS
теперь принимает ключoption
, который позволяет передавать произвольные kwargs базовому объектуpymongo.Connection
(выпуск #1015).Бит: Задача ежедневной очистки бэкенда больше не включена для бэкендов результатов, поддерживающих автоматическое истечение срока действия результатов (выпуск #1031).
Операции со списком Canvas теперь берут экземпляр приложения из первой задачи в списке, вместо того, чтобы зависеть от
current_app
(проблема #1249).Рабочий: Сообщение журнала ошибок декодирования сообщений теперь включает информацию об обратном пути.
Рабочий: Баннер запуска теперь включает системную платформу.
celery inspect|status|control
теперь выдает ошибку при использовании с транспортом брокера на основе SQL.
3.0.17¶
- дата выхода:
2013-03-22 04:00:00. UTC
- релиз на:
Спросите Солема
Теперь зависит от kombu 2.5.8
Теперь зависит от бильярда 2.7.3.23
RabbitMQ/Redis: реализация ограничения скорости без потоков и блокировок.
Это означает, что ограничения скорости создают минимальные накладные расходы при использовании RabbitMQ/Redis или будущих транспортов, использующих event-loop, и что реализация ограничений скорости теперь без потоков и блокировок.
Транспорты, основанные на потоках, пока будут использовать старую реализацию, но в Celery 3.1 планируется использовать таймер и для других брокерских транспортов.
Ограничения тарифов теперь работают с eventlet/gevent при использовании RabbitMQ/Redis в качестве брокера.
Регрессия привела к тому, что
task.retry
игнорировал дополнительные аргументы ключевых слов.Дополнительные аргументы ключевых слов теперь снова используются в качестве опций выполнения. Исправление внесено Саймоном Энгледью.
Windows: Исправлена проблема с тем, что при запуске рабочего пытались выбрать модуль настроек Django.
generic-init.d: Больше нет двойных кавычек
$CELERYD_CHDIR
(проблема #1235).generic-init.d: Удаляет синтаксис, специфичный для bash.
Исправление внесено Пяром Висландером.
Бэкенд результатов Cassandra: Теперь обрабатывает ошибку
AllServersUnavailable
(проблема #1010).Исправление внесено Джаредом Билом.
Результат: Теперь при десериализации приложения правильно перенаправляются в GroupResults (проблема #1249).
Исправление внесено Чарльзом-Акселем Дейном.
GroupResult.revoke
теперь поддерживает аргументы ключевых словterminate
иsignal
.Рабочий: Рабочие многопроцессорные пулы теперь импортируют модули задач/конфигурацию перед настройкой системы протоколирования, чтобы сигналы протоколирования могли быть подключены до их отправки.
аккорд: Возвращаемый экземпляр
AsyncResult
теперь имеет атрибутparent
, установленный в заголовокGroupResult
.Это соответствует тому, как работает
chain
.
3.0.16¶
- дата выхода:
2013-03-07 04:00:00. UTC
- релиз на:
Спросите Солема
С Международным женским днем!
Нам предстоит пройти долгий путь, поэтому это шанс для вас принять участие в работе одной из организаций, работающих над тем, чтобы сделать наши сообщества более разнообразными.
PyLadies - http://pyladies.com
Girls Who Code - http://www.girlswhocode.com
Women Who Code - http://www.meetup.com/Women-Who-Code-SF/
Теперь зависит от kombu версии 2.5.7
Теперь зависит от billiard версии 2.7.3.22
Сердцебиение AMQP теперь отключено по умолчанию.
Некоторые пользователи испытывают проблемы с включенным сердцебиением, и его использование не является строго необходимым.
Если у вас возникли проблемы с обнаружением обрывов соединения, вы можете снова включить сердцебиение, настроив параметр
BROKER_HEARTBEAT
.Worker: Теперь распространяет ошибки соединения, возникающие в обратных вызовах многопроцессорной обработки, чтобы можно было сбросить соединение (проблема #1226).
Рабочий: Теперь распространяет ошибки соединения, возникающие в обратных вызовах таймера, чтобы можно было сбросить соединение.
Модули в
CELERY_IMPORTS
иCELERY_INCLUDE
теперь импортируются в первоначальном порядке (выпуск #1161).Модули в
CELERY_IMPORTS
будут импортированы первыми, затем их продолжитCELERY_INCLUDE
.Спасибо Джоуи Вильгельму.
Новое завершение bash для
celery
доступно в git-репозитории:https://github.com/celery/celery/tree/3.0/extra/bash-completion
Вы можете использовать этот файл в качестве источника или поместить его в
bash_completion.d
, чтобы получить автозаполнение для утилиты командной строкиcelery
.Имя узла рабочего теперь может включать символы юникода (выпуск #1186).
Repr объекта
crontab
теперь отображается правильно (проблема #972).events.State
больше не изменяет исходный словарь событий.Больше не использует
Logger.warn
, устаревший в Python 3.Бэкэнд кэша: Теперь снова работает с аккордами (выпуск #1094).
Разблокировка аккордов теперь обрабатывает ошибки, возникающие при вызове обратного вызова.
Общий рабочий скрипт init.d: Проверка состояния теперь выполняется путем запроса pid экземпляра вместо отправки сообщений.
Внесен Миленом Павловым.
Улучшены init-скрипты для CentOS.
Обновлено для поддержки конвенций Celery 3.x.
Теперь используются встроенные в CentOS
status
иkillproc
.Поддержка многоузловых / многопидовых рабочих служб.
Стандартный вывод CentOS service-init с цветовой кодировкой.
Набор тестов.
Внесен Миленом Павловым.
ResultSet.join
теперь всегда работает при пустом наборе результатов (проблема #1219).Теперь поддерживается
group
, состоящий из одной задачи (выпуск #1219).Теперь поддерживает программу
pycallgraph
(выпуск #1051).Исправлены проблемы совместимости с Jython.
Учебник по Django: Теперь упоминается, что пример приложения должен быть добавлен в
INSTALLED_APPS
(Выпуск #1192).
3.0.15¶
- дата выхода:
2013-02-11 04:30:00 p.m. UTC
- релиз на:
Спросите Солема
Теперь зависит от billiard 2.7.3.21, в которой исправлена ошибка синтаксиса.
Исправлена ошибка с
CELERY_SEND_TASK_SENT_EVENT
.
3.0.14¶
- дата выхода:
2013-02-08 05:00:00 p.m. UTC
- релиз на:
Спросите Солема
Теперь зависит от Kombu 2.5.6
Теперь зависит от бильярда 2.7.3.20
execv
теперь отключен по умолчанию.Он создавал слишком много проблем для пользователей, но вы все еще можете включить его с помощью параметра CELERYD_FORCE_EXECV.
execv был включен только при использовании транспортов, отличных от AMQP/Redis, и он предназначен для предотвращения тупиков, вызванных тем, что мьютексы не освобождаются до форка процесса. К сожалению, это также изменяет среду, внося множество ошибок, которые трудно исправить без добавления ужасных хаков. О проблемах с тупиками сообщается гораздо реже, чем об ошибках, которые вызывает execv, поэтому мы теперь отключаем его по умолчанию.
Ведется работа по созданию неблокирующих версий этих транспортов, чтобы execv не был необходим (как это происходит с транспортами брокеров amqp и redis).
Определено поведение исключения аккордов (проблема #1172).
Начиная с Celery 3.1 обратный вызов хорды будет менять состояние на FAILURE, когда задача, являющаяся частью хорды, вызывает исключение.
Никогда не документировалось, что происходит в этом случае, и фактическое поведение было очень неудовлетворительным, действительно, оно просто передает значение исключения в обратный вызов chord.
По соображениям обратной совместимости мы не переходим на новое поведение в выпуске исправлений, даже если текущее поведение никогда не было документировано. Вместо этого вы можете включить параметр
CELERY_CHORD_PROPAGATES
, чтобы получить новое поведение, которое будет использоваться по умолчанию в Celery 3.1.Смотрите больше на Обработка ошибок.
рабочий: Исправлена ошибка с игнорированием и повторным выполнением заданий.
Обратные вызовы
on_chord_part_return
иTask.after_return
, а также сигналtask_postrun
должны вызываться, когда задача была повторно опробована/игнорирована.Исправление внесено Владом.
GroupResult.join_native
теперь уважает аргументpropagate
.subtask.id
добавлен как псевдоним кsubtask['options'].id
>>> s = add.s(2, 2) >>> s.id = 'my-id' >>> s['options'] {'task_id': 'my-id'} >>> s.id 'my-id'
worker: Исправлена ошибка Could not start worker processes, возникающая при перезапуске после разрыва соединения (выпуск #1118).
Добавляет новый сигнал
task-retried
(выпуск #1169).celery events –dumper теперь обрабатывает потерю соединения.
Теперь будет повторно отправлять отправленное событие в случае сбоя соединения.
amqp backend: Теперь используется
Message.requeue
вместо повторной публикации сообщения после опроса.Введена новая настройка
BROKER_HEARTBEAT_CHECKRATE
для изменения частоты отслеживания сердцебиений соединения брокера.Значение по умолчанию также было изменено с 3,0 на 2,0.
celery.events.state.State
теперь можно выбирать.Исправление внесено Мгером Мовсисяном.
celery.utils.functional.LRUCache
теперь можно выбирать.Исправление внесено Мгером Мовсисяном.
Команда stats broadcast теперь включает pid рабочих.
При участии Мгера Мовсисяна.
Новая команда пульта
conf
для получения рабочей текущей конфигурации.При участии Мгера Мовсисяна.
Добавляет возможность изменять аргумент обратного отсчета задачи разблокировки аккордов (выпуск #1146).
При участии Дзюна Сакаи
бить: Планировщик теперь использует метод now()` расписания, так что расписания могут предоставлять пользовательский способ получения текущей даты и времени.
При участии Рафаэля Слинкса
Исправлена травля модулей конфигурации в Windows или при использовании execv (проблема #1126).
Многопроцессорный регистратор теперь по умолчанию настроен на уровень журнала
ERROR
.Начиная с версии 3.0 многопроцессорные регистраторы были отключены по умолчанию (настраивались только при установке переменной окружения
MP_LOG
).
3.0.13¶
- дата выхода:
2013-01-07 04:00:00 p.m. UTC
- релиз на:
Спросите Солема
Теперь зависит от Kombu 2.5
Теперь зависит от бильярда 2.7.3.19
Исправлена проблема блокировки, которая могла возникнуть, когда пул производителей наследовал экземпляр пула соединений родительского процесса.
Опция
--loader
теперь снова работает (проблема #1066).celery зонтичная команда: Все подкоманды теперь поддерживают опцию
--workdir
(выпуск #1063).Группы, включенные в цепочки, теперь выдают GroupResults (выпуск #1057)
Ранее он неправильно добавлял обычный результат вместо результата группы, но теперь это работает:
>>> # [4 + 4, 4 + 8, 16 + 8] >>> res = (add.s(2, 2) | group(add.s(4), add.s(8), add.s(16)))() >>> res <GroupResult: a0acf905-c704-499e-b03a-8d445e6398f7 [ 4346501c-cb99-4ad8-8577-12256c7a22b1, b12ead10-a622-4d44-86e9-3193a778f345, 26c7a420-11f3-4b33-8fac-66cd3b62abfd]>
Цепочки теперь могут соединять другие цепочки и использовать частичные аргументы (проблема #1057).
Пример:
>>> c1 = (add.s(2) | add.s(4)) >>> c2 = (add.s(8) | add.s(16)) >>> c3 = (c1 | c2) >>> # 8 + 2 + 4 + 8 + 16 >>> assert c3(8).get() == 38
Подзадачи теперь можно использовать с незарегистрированными задачами.
Вы можете указывать подзадачи, даже если у вас просто имя:
>>> s = subtask(task_name, args=(), kwargs=()) >>> s.delay()
Команда celery shell теперь всегда добавляет текущий каталог к пути модуля.
Теперь рабочий будет правильно обрабатывать исключение
pytz.AmbiguousTimeError
, возникающее при подготовке ETA/отсчета времени при переходе на DST (проблема #1061).force_execv: Теперь гарантирует, что символы задач в оригинальных модулях задач всегда будут использовать правильный экземпляр приложения (проблема #1072).
Бэкенд AMQP: Теперь повторно публикует сообщения о результатах, которые были опрошены (используя
result.ready()
и друзей,result.get()
не будет делать этого в этой версии).Значения расписания Crontab теперь можно «обернуть вокруг»
Это означает, что значения типа
11-1
переводятся в[11, 12, 1]
.Внесен Лореном Абрамсом.
Команда
multi stopwait
теперь показывает pid процессов.Внесен Лореном Абрамсом.
- Обработка ETA/countdown исправлена, когда
CELERY_ENABLE_UTC
отключена (проблема #1065).
- Обработка ETA/countdown исправлена, когда
В сообщения включался ряд ненужных свойств, вызванных случайной передачей
Queue.as_dict
в качестве свойств сообщения.Предельные значения скорости теперь могут быть плавающими
Это также расширяет формат строки, чтобы значения типа
"0.5/s"
работали.При участии Кристофа Крибуса
Исправлена опечатка в документации по широковещательной маршрутизации (выпуск #1026).
Переписал запутанный раздел об идемпотентности в руководстве пользователя задачи.
Исправлена опечатка в руководстве по демонизации (выпуск #1055).
Исправлено несколько опечаток в документации.
Внесено Мариусом Гедминасом.
Пакеты: Теперь работает при использовании пула эвентов.
Исправление внесено Томасом Грейнджером.
Пакеты: Добавлен пример отправки результатов в
celery.contrib.batches
.Внесено Томасом Грейнджером.
Бэкенд MongoDB: Соединение
max_pool_size
теперь может быть установлено вCELERY_MONGODB_BACKEND_SETTINGS
.При участии Крейга Юнкинса.
Исправлена проблема при использовании ранних версий pytz.
Исправление внесено Владом.
Документация обновлена для включения значения по умолчанию для параметра
CELERY_TASK_RESULT_EXPIRES
.Улучшения в учебнике django-celery.
Внесено Locker537.
Управляющая команда
add_consumer
не сохраняла должным образом добавление новых очередей, чтобы они пережили разрыв соединения (проблема #1079).
3.0.12¶
- дата выхода:
2012-11-06 02:00 pm. UTC
- релиз на:
Спросите Солема
Теперь зависит от kombu 2.4.8
[Redis] Новый и улучшенный алгоритм цикла справедливой очереди (Кевин МакКарти).
[Redis] Теперь при восстановлении сообщений используется мьютекс на базе Redis.
- [Redis] Количество сообщений, которые могут быть восстановлены за один интервал, нет
больше не ограничена (но может быть установлена с помощью
unacked_restore_limit
transport option
).
Значение сердцебиения может быть указано в URL-адресах брокеров (Мгер Мовсисян).
Исправлена проблема с msgpack на Python 3 (Джаспер Брайант-Грин).
Теперь зависит от бильярда 2.7.3.18
Celery теперь можно использовать с инструментами статического анализа, такими как PyDev/PyCharm/pylint и т.д.
Документация по разработке переехала в раздел Read The Docs.
Новый URL: http://docs.celeryproject.org/en/master
Новый параметр
CELERY_QUEUE_HA_POLICY
, используемый для установки политики HA по умолчанию для очередей при использовании RabbitMQ.Новый метод
Task.subtask_from_request
возвращает подзадачу, используя текущий запрос.Метод results get_many не учитывал аргумент timeout.
Исправление внесено Ремигиушем Моджеевским
Скрипты generic_init.d теперь поддерживают установку
CELERY_CREATE_DIRS
для постоянного создания каталогов log и pid (выпуск #1045).Это может быть установлено в вашем
/etc/default/celeryd
.Исправлена странная проблема импорта kombu на Python 3.2 (проблема #1034).
Рабочий: Планировщик ETA теперь использует миллисекундную точность (проблема #1040).
Аргумент
--config
в программах теперь поддерживается всеми загрузчиками.Настройка
CASSANDRA_OPTIONS
теперь документирована.При участии Джареда Била.
Методы задач (
celery.contrib.methods
) не могут быть использованы со старым базовым классом задач, декоратор задач в этом модуле теперь наследуется от нового.Оптимизация была слишком нетерпеливой и приводила к тому, что некоторые сообщения журнала никогда не выходили.
celery.contrib.batches
теперь снова работает.Исправлено отсутствие пробелов в требованиях
bdist_rpm
(проблема #1046).Предел применения состояния события
tasks_by_name
перед фильтрацией по имени.Исправление внесено Александром А. Сосновским.
3.0.11¶
- дата выхода:
2012-09-26 04:00 p.m. UTC
- релиз на:
Спросите Солема
[security:low] скрипты generic-init.d изменили разрешения /var/log & /var/run
В учебнике по демонизации рекомендуемые каталоги были следующими:
CELERYD_LOG_FILE="/var/log/celery/%n.log" CELERYD_PID_FILE="/var/run/celery/%n.pid"
Но в самих скриптах файлы по умолчанию были
/var/log/celery%n.log
и/var/run/celery%n.pid
, так что если пользователь не изменил расположение по конфигурации, то каталоги/var/log
и << 3 >>> будут созданы - и, что еще хуже, изменены их разрешения и владельцы.Это изменение означает, что:
Файл pid по умолчанию
/var/run/celery/%n.pid
.Файл журнала по умолчанию
/var/log/celery/%n.log
.Каталоги создаются и изменяют свои разрешения только в том случае, если не заданы пользовательские расположения.
Пользователи могут принудительно создавать пути, вызывая подкоманду
create-paths
:$ sudo /etc/init.d/celeryd create-paths
Обновление Celery не приводит к обновлению init-скриптов
Чтобы обновить init-скрипты, необходимо повторно загрузить файлы из системы управления исходными кодами и обновить их вручную. Вы можете найти init-скрипты для версии 3.0.x по адресу:
Теперь зависит от бильярда 2.7.3.17
Исправление защиты стека запросов при инициализации приложения более одного раза (проблема #1003).
Задачи ETA теперь корректно работают, когда системный часовой пояс не совпадает с настроенным часовым поясом (проблема #1004).
Завершение задания теперь работает, если задание было отправлено в пул, но еще не подтверждено процессом пула (проблема #1007).
Исправление предоставлено Алексеем Зателепиным
Завершение задачи теперь правильно обновляет состояние задачи на отозванное и отправляет событие
task-revoked
.Generic worker init-script теперь по умолчанию ожидает выключения рабочих.
Multi: Больше не анализируется опция –app (проблема #1008).
Multi: команда
stop_verify
переименована вstopwait
.Демонизация: Теперь задерживает попытку создания pidfile/logfile до тех пор, пока не будет изменен рабочий каталог.
Команды celery worker и celery beat теперь учитывают опцию
--no-color
(выпуск #999).Исправлены опечатки в примерах eventlet (Выпуск #1000)
Исправление внесено Брайаном Бишопом. Поздравляем с открытием ошибки #1000!
Задачи, при выполнении которых появляется сообщение
Ignore
, теперь распознаются.Бит: Теперь показывает имя записи в журнале
sending due task
.
3.0.10¶
- дата выхода:
2012-09-20 05:30 p.m. BST
- релиз на:
Спросите Солема
Теперь зависит от kombu 2.4.7
Теперь зависит от бильярда 2.7.3.14
Исправляет крах при запуске при использовании Django и проектов до версии 1.4 (
setup_environ
).Жесткие временные ограничения теперь посылают сигнал KILL вскоре после TERM, чтобы завершить процессы, обработчики сигналов которых заблокированы расширениями C.
Billiard теперь устанавливается, даже если расширение C не может быть создано.
По-прежнему рекомендуется собирать расширение на C, если вы используете транспорт, отличный от RabbitMQ/Redis (или используете принудительный execv по какой-либо другой причине).
Pool теперь устанавливает атрибут
current_process().index
, который может быть использован для создания такого количества файлов журнала, сколько процессов в пуле.
Canvas: аккорд/группа/цепочка больше не изменяют состояние при вызове
Ранее вызов аккорда/группы/цепочки изменял идентификаторы подзадач таким образом:
>>> c = chord([add.s(2, 2), add.s(4, 4)], xsum.s()) >>> c() >>> c() <-- call again
во второй раз идентификаторы задач будут такими же, как и в предыдущем вызове. Теперь это исправлено, так что вызов подзадачи не изменит никаких опций.
Холст: Привязка аккорда к другой задаче теперь работает (проблема #965).
Рабочий: Исправлена ошибка, при которой стек запросов мог быть поврежден, если использовались относительные импорты.
Проблема обычно проявлялась в виде исключения при попытке отправить результат неудачного задания (
NoneType does not have id attribute
).Исправление внесено Сэмом Куком.
Задачи теперь могут поднимать
Ignore
, чтобы пропустить обновление состояний или событий после возврата.Пример:
from celery.exceptions import Ignore @task def custom_revokes(): if redis.sismember('tasks.revoked', custom_revokes.request.id): raise Ignore()
Теперь рабочий убеждается, что стеки запросов/задач не были изменены начальным
Task.__call__
.Раньше это было бы проблемой, если бы класс пользовательской задачи определял
__call__
и также называлsuper()
.Из-за проблем быстрая локальная оптимизация была отключена и может быть включена только установкой атрибута
USE_FAST_LOCALS
.Worker: Теперь при выключении по умолчанию устанавливается таймаут сокета в 5 секунд, чтобы прерванное чтение сокета не мешало правильному выключению (проблема #975).
Дополнительные исправления, связанные с исправлением поздних событий/гевентов.
Документация для установок, несовместимых с реальностью:
CELERY_TASK_PUBLISH_RETRY
Документирован как отключенный по умолчанию, но он был включен по умолчанию с версии 2.5, как указано в журнале изменений версии 2.5.
CELERY_TASK_PUBLISH_RETRY_POLICY
Значение max_retries по умолчанию было установлено на 100, но в документах значилось как 3, а значение interval_max было установлено на 1, но в документах значилось как 0,2. Теперь по умолчанию установлены значения 3 и 0,2, как и было изначально задокументировано.
Исправление внесено Мэттом Лонгом.
Рабочий: Улучшены сообщения в журнале при установлении и потере соединения.
Значение „0“ для расписания Crontab должно быть „*“ (проблема #972).
Отозванные задания теперь удаляются из зарезервированного/активного состояния в рабочем (выпуск #969)
Исправление внесено Алексеем Зателепиным.
gevent: Теперь поддерживаются жесткие временные ограничения с использованием
gevent.Timeout
.Документация: Ссылки на init-скрипты теперь указывают на ветку 3.0 вместо ветки разработки (master).
Документация: Исправлена опечатка в руководстве пользователя сигналов (проблема #986).
instance.app.queues
->instance.app.amqp.queues
.Eventlet/gevent: Рабочий не установил должным образом пользовательское приложение для новых гринлетов.
Eventlet/gevent: Исправлена ошибка, при которой рабочий не мог восстановиться после потери соединения (проблема #959).
Также, из-за предполагаемой ошибки в gevent параметр
BROKER_CONNECTION_TIMEOUT
был отключен при использовании gevent
3.0.9¶
- дата выхода:
2012-08-31 06:00 p.m. BST
- релиз на:
Спросите Солема
Важное замечание для пользователей Django и планировщика баз данных!
Недавно была исправлена проблема с часовыми поясами для периодических задач, но ошибочные часовые пояса уже могли быть сохранены в базе данных, поэтому для того, чтобы исправление сработало, необходимо сбросить поля
last_run_at
.Это можно сделать, выполнив следующую команду:
$ python manage.py shell >>> from djcelery.models import PeriodicTask >>> PeriodicTask.objects.update(last_run_at=None)
Это также необходимо сделать, если вы измените часовой пояс или настройки
CELERY_ENABLE_UTC
.Обратите внимание на настройку
CELERY_ENABLE_UTC
.Если вы ранее отключили эту функцию, чтобы заставить периодические задачи работать с вашим часовым поясом, то теперь вам рекомендуется включить ее снова.
Теперь зависит от Kombu 2.4.5, в которой исправлена установка PyPy + Jython.
Исправлена ошибка с часовыми поясами, когда
CELERY_ENABLE_UTC
отключено (выпуск #952).Исправлена опечатка в механизме обновления
celerybeat
(выпуск #951).Убедитесь, что аргумент exc_info для логирования разрешен (проблема #899).
Исправлена проблема с Python 3.2 и переполнением таймаута соединения потоков (выпуск #796).
В тестовом примере для Python 2.5 иногда возникали сбои.
Набор модульных тестов теперь подходит для PyPy 1.9.
Экземпляры приложений теперь поддерживают оператор
with
.Это вызывает новый метод
app.close()
при выходе, который очищает приложение, например, закрывает соединения пула.Обратите внимание, что это необходимо только при динамическом создании приложений, например, «временных» приложений.
Поддержка передачи подзадачи в цепочку.
Например:
pipe = sometask.s() | othertask.s() new_pipe = mytask.s() | pipe
Внесено Стивом Морином.
Исправлена проблема с групповыми результатами на непиксельных сериализаторах.
Исправление внесено Стивом Морином.
3.0.8¶
- дата выхода:
2012-08-29 05:00 p.m. BST
- релиз на:
Спросите Солема
Теперь зависит от Kombu 2.4.4
Исправлена проблема с amqplib и получением больших полезных нагрузок сообщений (проблема #922).
Проблема проявлялась либо в зависании рабочего, либо в появлении исключения
Framing error
.Пользователи нового транспорта
pyamqp://
должны обновить его до amqp 0.9.3.Бит: Исправлена еще одна ошибка с часовыми поясами в расписаниях интервалов и Crontab (выпуск #943).
Бит: Файл расписания теперь автоматически очищается при изменении часового пояса.
Расписание также очищается при обновлении до версии 3.0.8 с более ранней версии, это делается для регистрации первоначальной информации о часовом поясе.
События: Событие
worker-heartbeat
теперь включает поля подсчета обработанных и активных данных.При участии Мгера Мовсисяна.
Исправлена ошибка с письмом об ошибке и новыми классами задач (выпуск #931).
BaseTask.__call__
больше не оптимизируется, если он был исправлен обезьяной.Исправлена проблема выключения при использовании gevent (Выпуск #911 и Выпуск #936).
Исправление внесено Томасом Месоном.
3.0.7¶
- дата выхода:
2012-08-24 05:00 p.m. BST
- релиз на:
Спросите Солема
Исправляет несколько проблем с периодическими задачами и часовыми поясами (выпуск #937).
Теперь зависит от kombu 2.4.2
Redis: Исправление сбоя, связанного с состоянием гонки
Устраняет бесконечный цикл, который мог произойти при повторной попытке установить соединение с брокером.
Демоны теперь перенаправляют стандартные файловые дескрипторы на
/dev/null
Хотя по умолчанию стандартные выходы также перенаправляются в логгер, но вы можете отключить это, изменив настройку
CELERY_REDIRECT_STDOUTS
.Устраняет возможные проблемы, когда eventlet/gevent исправляется слишком поздно.
LoggingProxy
больше не определяетfileno()
(проблема #928).Результаты теперь игнорируются для задачи разблокировки аккордов.
Исправление внесено Стивом Морином.
Бэкенд Cassandra теперь работает, если отключено истечение срока действия результатов.
Исправление внесено Стивом Морином.
Объект traceback теперь передается в обработчики сигналов вместо строкового представления.
Исправление внесено Адамом ДеПю.
Команда Celery: Расширения теперь сортируются по имени.
Регрессия привела к тому, что событие
task-failed
отправлялось с объектом исключения вместо его строкового представления.Рабочий демон пытался создать файл pid перед демонизацией, чтобы отловить ошибки, но этот файл не сразу освобождался (проблема #923).
Исправлена совместимость с Jython.
billiard.forking_enable
вызывался всеми пулами, а не только пулом процессов, что привело бы к бесполезному предупреждению, если бы расширения billiard C не были установлены.
3.0.6¶
- дата выхода:
2012-08-17 11:00 Спроси у Солема
Теперь зависит от kombu 2.4.0
Теперь зависит от бильярда 2.7.3.12
Redis: Celery теперь пытается восстановить сообщения, когда в очереди нет сообщений.
Расписания Crontab теперь правильно учитывают настройку
CELERY_TIMEZONE
.Важно отметить, что расписания Crontab по умолчанию используют время UTC, если этот параметр не установлен.
Выпуск #904 и django-celery #150.
billiard.enable_forking
теперь устанавливается только пулом процессов.Транспорт теперь правильно отображается celery report (проблема #913).
Аргумент –app теперь работает, если последняя часть является именем модуля (проблема #921).
Исправлена проблема с нецелочисленными исключениями (бильярд #12).
Добавляет атрибут
task_name
кEagerResult
, который всегдаNone
(проблема #907).Старый класс Task в
celery.task
больше не принимает магические kwargs по умолчанию (проблема #918).Когда-то давно регрессия отключила магические гномы для них, и поскольку никто не жаловался на это, у нас нет стимула исправлять это сейчас.
Управляющая команда
inspect reserved
работала некорректно.Теперь должен лучше работать с инструментами для статического анализа за счет явного указания динамически создаваемых атрибутов в модулях
celery
и << 1 >>>.Завершение задачи теперь приводит к
RevokedTaskError
вместоWorkerLostError
.AsyncResult.revoke
теперь принимает аргументыterminate
иsignal
.Событие
task-revoked
теперь включает новые поля:terminated
,signum
иexpired
.Аргументом к
TaskRevokedError
теперь является одна из причинrevoked
,expired
илиterminated
.Старый класс Task больше не использует
classmethod
дляpush_request
иpop_request
(проблема #912).GroupResult
теперь поддерживает атрибутchildren
(выпуск #916).AsyncResult.collect
теперь уважает аргументintermediate
(проблема #917).Исправление примера задачи в документации (выпуск #902).
Eventlet исправлен таким образом, чтобы среда была исправлена как можно скорее.
eventlet: Теперь предупреждает, если модули, связанные с Celery и зависящие от потоков, импортируются до того, как eventlet будет исправлен.
Улучшены примеры событий и камер в руководстве по мониторингу.
Отключает точки входа команды celery setuptools, если команда не может быть загружена.
Исправлен сломанный пример
dump_request
в руководстве по задачам.
3.0.5¶
- дата выхода:
2012-08-01 04:00 pm. БСТ
- релиз на:
Спросите Солема
Теперь зависит от kombu 2.3.1 + billiard 2.7.3.11
Исправлена ошибка с опцией -B (
cannot pickle thread.lock objects
) (Выпуск #894 + Выпуск #892, + django-celery #154).Управляющая команда
restart_pool
теперь требует включения параметраCELERYD_POOL_RESTARTS
Это изменение было необходимо, поскольку событие мультипроцессинга, от которого зависит команда перезапуска, отвечает за создание множества семафоров/файловых дескрипторов, что приводит к проблемам в некоторых средах.
chain.apply
теперь передает args первой задаче (проблема #889).Документированы ранее секретные опции монитора django-celery в руководстве пользователя мониторинга (выпуск #396).
Старый журнал изменений теперь организован в отдельные документы для каждой серии, см. История.
3.0.4¶
- дата выхода:
2012-07-26 07:00 p.m. БСТ
- релиз на:
Спросите Солема
Теперь зависит от Kombu 2.3
Новый экспериментальный автономный монитор Celery: Цветок
Смотрите Цветок: Веб-монитор Celery в реальном времени, чтобы узнать об этом больше!
При участии Мгера Мовсисяна.
Теперь поддерживаются сердцебиения AMQP при использовании нового транспорта
pyamqp://
.Транспорт amqp требует установки библиотеки << 1 >>>:
$ pip install amqp
Затем необходимо установить префикс транспортного URL в
pyamqp://
.По умолчанию значение сердцебиения составляет 10 секунд, но его можно изменить с помощью параметра
BROKER_HEARTBEAT
:BROKER_HEARTBEAT = 5.0
Если для пульса брокера установлено значение 10 секунд, пульс будет отслеживаться каждые 5 секунд (удвоенная частота пульса).
Более подробную информацию см. в Kombu 2.3 changelog.
Теперь поддерживаются уведомления RabbitMQ Consumer Cancel Notifications, использующие транспорт
pyamqp://
.Это необходимо при работе RabbitMQ в кластере.
Более подробную информацию см. в Kombu 2.3 changelog.
Информация о доставке больше не передается напрямую.
Было обнаружено, что транспорт SQS добавляет объекты, которые нельзя пикировать, в отображение информации о доставке, поэтому нам пришлось снова вернуться к использованию белого списка.
Исправление этой ошибки также означает, что транспорт SQS теперь снова работает.
Семафор не освобождался должным образом, когда задача была отозвана (проблема #877).
Это может привести к тому, что задания будут проглочены и не будут освобождены до перезагрузки рабочего места.
Спасибо Hynek Schlawack за отладку проблемы.
Повторное выполнение задания теперь также пересылает все связанные задания.
Это означает, что если задача является частью цепочки (или связана каким-либо другим способом), и даже если задача будет повторно выполнена, то следующая задача в цепочке будет выполнена, когда повторная попытка будет успешной.
Аккорды: Теперь поддерживается задание интервала и других аргументов ключевых слов в задаче разблокировки аккордов.
Теперь интервал можно задать как часть подзадачи kwargs:
chord(header)(body, interval=10.0)
Кроме того, задача разблокировки аккордов теперь использует параметр Task.default_retry_delay, используемый, когда не указан ни один из них, что также означает, что интервал по умолчанию может быть изменен с помощью аннотаций:
CELERY_ANNOTATIONS = { 'celery.chord_unlock': { 'default_retry_delay': 10.0, } }
Новый метод
app.add_defaults()
может добавить новые словари конфигурации по умолчанию в конфигурацию приложений.Например:
config = {'FOO': 10} app.add_defaults(config)
то же самое, что и
app.conf.update(config)
, за исключением того, что данные не будут копироваться, и что они не будут выбраковываться, когда рабочий порождает дочерние процессы.Кроме того, метод принимает вызываемый параметр:
def initialize_config(): # insert heavy stuff that can't be done at import time here. app.add_defaults(initialize_config)
что означает то же самое, что и выше, за исключением того, что это не произойдет до тех пор, пока конфигурация Celery не будет действительно использована.
В качестве примера, Celery может лениво использовать конфигурацию приложения Flask:
flask_app = Flask() app = Celery() app.add_defaults(lambda: flask_app.config)
Отозванные задания не помечались как отозванные в бэкенде результатов (проблема #871).
Исправление внесено Хинеком Шлаваком.
Event-loop теперь правильно обрабатывает случай, когда объект epoll poller был закрыт (проблема #882).
Исправлена синтаксическая ошибка в
funtests/test_leak.py
Исправление внесено Каталином Якобом.
группа/куски: Теперь принимает пустой список задач (выпуск #873).
Новые названия методов:
Celery.default_connection()
➠connection_or_acquire()
.Celery.default_producer()
➠producer_or_acquire()
.
Старые имена все еще работают для обратной совместимости.
3.0.3¶
- дата выхода:
2012-07-20 09:17 p.m. БСТ
- релиз на:
Спросите Солема
amqplib передает объект канала как часть delivery_info, и он не является pickleable, поэтому мы его удаляем.
3.0.2¶
- дата выхода:
2012-07-20 04:00 p.m. БСТ
- релиз на:
Спросите Солема
- Ошибка привела к тому, что следующие параметры задачи не принимали значения по умолчанию из файла
конфигурация (Выпуск #867 + Выпуск #858)
Были затронуты следующие настройки:
CELERY_IGNORE_RESULT
CELERYD_SEND_TASK_ERROR_EMAILS
CELERY_TRACK_STARTED
CElERY_STORE_ERRORS_EVEN_IF_IGNORED
Исправление внесено Джоном Уотсоном.
Запрос задачи:
delivery_info
теперь передается как есть (выпуск #807).Аргумент ETA теперь поддерживает даты с заданным часовым поясом (проблема #855).
Баннер рабочего отображал настройки автомасштаба в неправильном порядке (проблема #859).
Команды расширения теперь загружаются после установки параллелизма, чтобы они не мешали таким вещам, как исправление эвентов.
Исправлена ошибка в пуле потоков (выпуск #863)
Обработчик отказа задачи перепутал поля в
sys.exc_info()
.Исправление внесено Ринатом Шигаповым.
Исправлены опечатки и формулировки в документации.
Исправление предоставлено Полом Макмилланом
Новая настройка:
CELERY_WORKER_DIRECT
Если эта функция включена, каждый работник будет потреблять из своей собственной выделенной очереди, которую можно использовать для направления заданий конкретным работникам.
Исправлено несколько краевых ошибок в команде добавления потребительского пульта дистанционного управления.
migrate
: Теперь можно фильтровать и перемещать задания к определенным работникам, если включеноCELERY_WORKER_DIRECT
.Среди прочих улучшений были добавлены следующие функции:
move_direct(filterfun, **opts)
move_direct_by_id(task_id, worker_hostname, **opts)
move_direct_by_idmap({task_id: worker_hostname, ...}, **opts)
move_direct_by_taskmap({task_name: worker_hostname, ...}, **opts)
default_connection()
теперь принимает аргумент pool, который при установке значения false приводит к созданию нового соединения вместо получения соединения из пула.Новый сигнал:
celeryd_after_setup
.Загрузчик по умолчанию теперь сохраняет атрибуты в нижнем регистре из модуля конфигурации.
3.0.1¶
- дата выхода:
2012-07-10 06:00 p.m. БСТ
- релиз на:
Спросите Солема
Теперь зависит от kombu 2.2.5
inspect теперь поддерживает аргумент limit:
myapp.control.inspect(limit=1).ping()
Beat: теперь работает с дататаймами с учетом часовых поясов.
Классы задач, наследующие
from celery import Task
, ошибочно включалиaccept_magic_kwargs
.Исправлена ошибка в
inspect scheduled
(выпуск #829).Бит: Теперь сбрасывает расписание для обновления до UTC.
Команда celery worker теперь работает с eventlet/gevent.
Ранее это не приводило к достаточно раннему исправлению среды.
Команда celery теперь поддерживает команды расширения с использованием точек входа setuptools.
Библиотеки могут добавлять дополнительные команды к команде celery, добавляя точку входа, например:
setup( entry_points=[ 'celery.commands': [ 'foo = my.module:Command', ], ], ...)
Затем команда должна поддерживать интерфейс
celery.bin.base.Command
.contrib.migrate: Новые утилиты для перемещения задач из одной очереди в другую.
move_tasks()
Событие
task-sent
теперь содержит поляexchange
и << 2 >>>.Исправлена ошибка с установкой на Python 3.
Исправление внесено Джедом Смитом.
3.0.0 (Chiastic Slide)¶
- дата выхода:
2012-07-07 01:30 p.m. BST
- релиз на:
Спросите Солема