似乎无法从芹菜任务修改缓存值

Cannot seem able to modify cache value from celery task

描述:

我想要一个缓存值(让我们称之为 flag)来知道 celery 任务何时完成执行。 我有一个视图让前端轮询此标志,直到它变成 False.

代码:

问题:

如果我 运行 同步任务,一切都会按预期进行。当我异步 运行 任务时,缓存键保持不变(如预期的那样)并且它通过这 3 个方法正确传递,但缓存值似乎没有在任务和视图之间更新。

如果您 运行 您的任务是异步的,它们是不同进程的一部分,这意味着由于 LocMemCache 后端,任务和视图将不会使用相同的存储(每个都有自己的内存)。

由于@Linovia 的回答和对 Django 文档的深入研究,我现在使用 django-redis 作为我的案例的解决方法。

唯一需要更改的是 CACHES 设置(当然还有活动的 Redis 服务器!):

settings.py:

CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": 'redis://127.0.0.1:6379/1',
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    }
}

现在缓存存储是单一的。
django-redis 是一个文档齐全的库,可以按照说明进行操作。