我使用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缓存中无用的键的另一个示例视图:
答案 0 :(得分:0)
您不能更改此设置。任务密钥由Redis后端使用的ResultConsumer
类创建。 ResultConsumer
然后将任务密钥的创建委派给BaseKeyValueStoreBackend
类。实际创建密钥的get_key_for_task
方法使用设置为task_keyprefix
的硬编码celery-task-meta-
。因此,要更改行为,您必须将这些类子类化。没有配置选项。