【发布时间】:2019-02-16 22:27:41
【问题描述】:
说明:
我想要一个缓存值(我们称之为flag)来知道芹菜任务何时完成执行。
我有一个视图让前端轮询这个标志,直到它变成False。
代码:
-
settings.py:... MEMCACHED_URL = os.getenv('MEMCACHED_URL', None) # Cache of devel or production if 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_task def 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 False -
views.py:def get_cached_value(request, cache_key): value = cache_key.get(cache_key) # This remains True until the cache key # expires.
问题:
如果我同步运行任务,一切都会按预期工作。当我异步运行任务时,缓存键保持不变(如预期的那样),并且通过这 3 个方法正确传递,但缓存值似乎没有在任务和视图之间更新。
【问题讨论】:
标签: python django django-rest-framework celery django-cache