Django Memcached比较和设置模式产生错误的结果

Django Memcached比较和设置模式产生错误的结果,django,memcached,python-memcached,Django,Memcached,Python Memcached,我正在尝试实现memcached比较和设置模式,遵循Guido的说明: 然而,我似乎没有弄对,也不知道出了什么问题。下面的文件使用Django(最终版本1.4.5)和python memcache(1.48) 设置.py CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': '127.0.0.1:11211

我正在尝试实现memcached比较和设置模式,遵循Guido的说明:

然而,我似乎没有弄对,也不知道出了什么问题。下面的文件使用Django(最终版本1.4.5)和python memcache(1.48)

设置.py

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': '127.0.0.1:11211',
    }
}
#!/usr/bin/env python
from django.core.cache import cache
import multiprocessing.dummy

django_key = "TEST"
cached_key = cache.make_key(django_key).encode("UTF-8")

def add_to_cache(item):
    client = cache._cache
    #client = cache._lib.Client(cache._servers)

    while True:
        items = client.gets(cached_key)
        if client.cas(cached_key, items+(item,)):
            break

if __name__ == "__main__":
    cache.set(django_key, ())

    p = multiprocessing.dummy.Pool(2)
    p.map(add_to_cache, range(10))
    print(len(cache.get(django_key)))
djangocache.py

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': '127.0.0.1:11211',
    }
}
#!/usr/bin/env python
from django.core.cache import cache
import multiprocessing.dummy

django_key = "TEST"
cached_key = cache.make_key(django_key).encode("UTF-8")

def add_to_cache(item):
    client = cache._cache
    #client = cache._lib.Client(cache._servers)

    while True:
        items = client.gets(cached_key)
        if client.cas(cached_key, items+(item,)):
            break

if __name__ == "__main__":
    cache.set(django_key, ())

    p = multiprocessing.dummy.Pool(2)
    p.map(add_to_cache, range(10))
    print(len(cache.get(django_key)))
运行它:

mzialla@Q330 ~/test $ DJANGO_SETTINGS_MODULE=settings python djangocache.py
5
它偶尔会输出6、7等,就像您在处理比赛条件时所期望的那样。我已经尝试了多个客户端实例化(参见注释)


帮助?

python memcached默认情况下禁用cas。通过添加

 client.cache_cas = True
到您的代码

在问了这个问题之后,我发现了世卫组织的评论