Как я могу изменить название задачи, которую Celery отправляет на сервер? - PullRequest
0 голосов
/ 09 мая 2019

Я построил систему очередей с использованием Celery, которая принимает веб-запросы и выполняет некоторые задачи для обработки этих запросов. Я использую Redis в качестве бэкэнда для Celery, но думаю, что этот вопрос применим ко всем бэкэндам.

Celery возвращает имя задачи как celery-task-meta-<task ID> и сохраняет его в бэкэнде. Это бессмысленно для меня. Как я могу изменить название результата, который сельдерей посылает в Redis? Я просмотрел всю документацию Celery , чтобы попытаться выяснить, как это сделать.

Монитор CLI Redis показывает, что Celery использует метод SETEX, и отправляет следующий ввод:

"SETEX" "celery-task-meta-dd32ded3-00aa-4884-8b21-42f8332e7fac" "86400" "{\" status \ ": \" SUCCESS \ ", \" result \ ": {\" mode \ ": \" staging \ ", \ "123 \": 50}, \ "traceback \": null, \ "children \": [], \ "task_id \": \ "dd32ded3-00aa-4884-8b21-42f8332e7fac \", \ "date_done \": \ "2019-05-09T16: 44: 12.826951 \", \ "parent_id \": \ "2e99d958-cd5a-4700-a7c2-22c90f387f28 \"} "

"result": {...}, который вы видите в приведенной выше команде SETEX, - это то, что возвращает задание. Я хотел бы, чтобы SETEX был более похож на: "SETEX" "mode-staging-123-50-SUCCESS" "{...}", чтобы при просмотре всех моих ключей в Redis имя ключа было для меня информативным.

Вот еще один пример представления ключей в моем кэше Redis, которые не имеют смысла:

redis keys

1 Ответ

0 голосов
/ 10 мая 2019

Вы не можете это изменить. Ключ задачи создается классом ResultConsumer, который использует бэкэнд Redis. ResultConsumer затем делегирует создание ключа задачи классу BaseKeyValueStoreBackend. Метод get_key_for_task, который фактически создает ключ, использует жестко закодированный task_keyprefix, установленный на celery-task-meta-. Таким образом, чтобы изменить поведение, вам придется разделить эти классы на подклассы. Там нет опции конфигурации для этого.

...