Как прочитать результаты сельдерея из бэкенда результатов redis

#redis #celery #django-celery #redis-py #flower

Вопрос:

У нас есть настройка сельдерея (django) с одной базой данных redis в качестве брокера, а другой-в качестве бэкенда результатов.

При проверке ключей в результирующем бэкэнде redis мы видим 485 Тыс. ключей типа string и 7 ключей типа none. Примером ключа является: celery-task-meta-26351389-c077-4ba6-8e34-66731f6636b3 . Я предполагаю 26351389-c077-4ba6-8e34-66731f6636b3 , что это идентификатор задачи. Ожидается ли, что он не увидит более сложных типов ?

При просмотре результатов через интерфейс flower мы видим: введите описание изображения здесь

  • Обработано 376 тыс.
  • 8K не удалось
  • 368 тыс. удалось
  • 86 повторено

При переходе к просмотру с /tasks?state=FAILURE ошибкой мы видим там только 2 неудачные задачи. При нажатии на UUID мы переходим в представление задач, task/fdb7b30f-d9cf-4b60-a1b4-11d6aee241b3 и мы видим подробную информацию, включая аргументы, исключение и трассировку.

При переходе к просмотру успеха /tasks?state=SUCCESS мы видим 10 тыс. записей. Но для самых ранних задач в списке соответствующее представление задач сообщает нам Unknown task '377cc204-cb5e-41bc-9aa8-194679ac9bce' об этом . Для более поздних задач мы увидим некоторую информацию.

В конце концов, бэкэнд redis использует почти 500 МБ памяти, но, похоже, доступно очень мало информации.

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

Ответ №1:

Насколько я знаю, Flower сохраняет информацию о задачах в памяти (ОЗУ), и это не связано с серверной частью сельдерея.

Серверная часть Celery используется для получения результатов ваших асинхронных задач с помощью собственного механизма TTL (в вашем случае простой Redis ttl).

Флауэр только что зарегистрировался в очередях брокера и во всех случаях заглядывайте.

Если вы хотите, чтобы Flower сохранял больше задач (или увеличивал размер истории), я думаю, вам следует увеличить конфигурацию max-tasks цветка. (по умолчанию=10 тысяч). Более подробная информация в документах.

Комментарии:

1. Спасибо. По какой-то причине я подумал, что флауэр каким-то образом читает с бэкэнда. Это объясняет такое поведение. Но тогда что же на самом деле хранит сельдерей в бэкэнде ? Просматривая его через redis-py, я нахожу там только огромный список строк. Ожидается ли это ?

2. Если ваша задача сельдерея вернет какое-то значение, оно будет сохранено там для последующего извлечения.

3. Не забудьте принять ответ, пожалуйста 🙂