我正在使用Google App Engine和Python 2.7运行时。我知道它是多线程的,但Google App Engine的多实例特性使这个问题与任何运行时间相关。
我有一个网络信使应用程序。它基于Channel API,用于接收各种通知(接收消息,用户连接,用户类型),以及用于维护全局状态的Memcache API(以及用于实际存储消息历史记录的High Replication数据存储)。 最后一条消息的时间戳保存在Memcache中(连同其他数据,例如用户是否在线,是否打字以及其他人)。 每当用户发送消息时,使用新的时间戳值更新Memcache,而使用Channel API发送旧的时间戳值。 当同时发送多条消息时,Memcache有时会被覆盖,我会得到该时间戳的奇怪值。例如 - 一条消息有一定的时间戳, next 有一个 旧的 时间戳。
我知道Memcache Client API,但我不能使用它,因为我必须先读取最新的时间戳并写下新的时间戳。
简而言之,我想以某种方式等待(Memcache?)数据完全未被占用(读取或写入),以某种方式锁定它,在整个请求中继续,然后将其释放以用于下一个请求。
有什么建议吗?
提前谢谢你。 :)
答案 0 :(得分:1)
Memcache API中没有明确的锁定功能,但您可以使用Compare-and-Set机制实现此效果。 Guido有一个带有例子here的文章。但是,只有Client类公开CAS,但是从您的描述中不清楚为什么这对您不起作用。