#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. Не забудьте принять ответ, пожалуйста 🙂