如何更改Celery发送到后端的任务的名称?

时间:2019-05-09 17:16:43

标签: python-3.x redis celery

我使用Celery构建了一个队列系统,该系统可以接受Web请求并执行一些任务以对这些请求执行操作。我将Redis用作Celery的后端,但我想这个问题将适用于所有后端。

Celery返回任务名称为celery-task-meta-<task ID>,并将其存储在后端。这对我来说毫无意义。如何更改芹菜发送给Redis的结果的名称?我已经搜索了Celery's documentation的全部内容,以尝试找出解决方法。

Redis CLI监视器显示Celery正在使用SETEX方法并发送以下输入:

  

“ SETEX”“ celery-task-meta-dd32ded3-00aa-4884-8b21-42f8332e7fac”   “ 86400”“ {\”状态\“:\”成功\“,\”结果\“:{\”模式\“:\”舞台\“,   \“ 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 \”}“

在上面的SETEX命令中可以看到的"result": {...}是任务返回的内容。我希望SETEX更像是: "SETEX" "mode-staging-123-50-SUCCESS" "{...}",这样当我在Redis中查看我所有的密钥时,密钥的名称对我来说是信息性的。

这是我的Redis缓存中无用的键的另一个示例视图:

redis keys

1 个答案:

答案 0 :(得分:0)

您不能更改此设置。任务密钥由Redis后端使用的ResultConsumer类创建。 ResultConsumer然后将任务密钥的创建委派给BaseKeyValueStoreBackend类。实际创建密钥的get_key_for_task方法使用设置为task_keyprefix的硬编码celery-task-meta-。因此,要更改行为,您必须将这些类子类化。没有配置选项。