为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

千巷猫影 2021-06-07 17:30:22
描述:我想要一个缓存值(让我们称之为 a flag)来知道 celery 任务何时完成执行。我有一个视图让前端轮询这个标志,直到它变成False.代码:settings.py:...MEMCACHED_URL = os.getenv('MEMCACHED_URL', None) # Cache of devel or productionif MEMCACHED_URL:    CACHES = {        'default': {            'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',            'LOCATION': MEMCACHED_URL,         }    }else:    CACHES = {        'default': {            'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',            'LOCATION': 'unique-snowflake',        }    }api/views.py:def a_view(request):    # Do some stuff    cache.add(generated_flag_key, True)    tasks.my_celery_task.apply_async([argument_1, ..., generated_flag_key])    # Checking here with cache.get(generated_flag_key), the value is True.    # Do other stuff.tasks.py:@shared_taskdef my_celery_task(argument_1, ..., flag_cache_key):    # Do stuff    cache.set(flag_cache_key, False) # Checking here with                                      # cache.get(flag_cache_key),the                                     # flag_cache_key value is Falseviews.py:def get_cached_value(request, cache_key):    value = cache_key.get(cache_key) # This remains True until the cache key                                      # expires.问题:如果我同步运行任务,一切都会按预期工作。当我异步运行任务时,缓存键保持不变(如预期的那样)并且它通过这 3 个方法正确传递,但缓存值似乎没有在任务和视图之间更新。
查看完整描述

2 回答

?
芜湖不芜

TA贡献1796条经验 获得超7个赞

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


查看完整回答
反对 回复 2021-06-16
  • 2 回答
  • 0 关注
  • 126 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信