【发布时间】:2014-12-11 01:58:47
【问题描述】:
看看下面我的简单 Python memcached 代码:
import memcache
memcache_client = memcache.Client(['127.0.0.1:11211'], debug=True)
key = "myList"
obj = ["A", "B", "C"]
memcache_client.set(key, obj)
现在,假设我想将一个元素“D”附加到缓存为myList 的列表中,我该如何以原子方式完成它?
我知道这是错误的,因为它不是原子的:
memcache_client.set(key, memcache_client.get(key) + ["D"])
上面的语句包含一个竞争条件。如果另一个线程在正确的时间执行相同的指令,其中一个更新将被破坏。
我该如何解决这种竞争状况?如何以原子方式更新存储在 memcached 中的列表或字典?
【问题讨论】:
-
可能这就是答案,您应该使用
cas()(检查并设置)而不是简单的set() -
你使用的是哪个 python memcache 库?
-
@Anentropic:来自我的点子冻结:
python-memcached==1.53
标签: python multithreading memcached atomic