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

描述:


我想要一个缓存值(让我们称之为 a flag)来知道 celery 任务何时完成执行。我有一个视图让前端轮询这个标志,直到它变成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 个方法正确传递,但缓存值似乎没有在任务和视图之间更新。


千巷猫影
浏览 129回答 2
2回答

芜湖不芜

如果你异步运行你的任务,它们是不同进程的一部分,这意味着由于 LocMemCache 后端,任务和视图将不会使用相同的存储(每个都有自己的内存)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python