1

我正在使用带有 Python 2.7 运行时的 Google App Engine。我知道它是多线程的,但是 Google App Engine 的多实例特性使得这个问题与任何运行时都相关。

我有一个网络信使应用程序。它基于 Channel API 用于接收各种通知(消息接收、用户连接、用户键入)和 Memcache API 用于维护全局状态(以及 High Replication Datastore 用于实际存储消息历史记录)。最后一条消息的时间戳保存在 Memcache 中(连同其他数据,例如用户是否在线、是否打字等)。每当用户发送消息时,Memcache 都会使用新的时间戳值更新,而旧的时间戳值则使用 Channel API 发送。当同时发送多条消息时,Memcache 有时会被覆盖,我会得到那个时间戳的奇怪值。例如 - 一条消息具有特定时间戳,而一条消息具有较旧的时间戳时间戳。

我知道 Memcache Client API,但我不能使用它,因为我必须先读取最新的时间戳,然后再写入新的时间戳。

简而言之,我想以某种方式等待(Memcache?)数据完全未被占用(读取或写入),以某种方式锁定它,继续整个请求,然后为下一个请求释放它。

有什么建议么?

先感谢您。:)

4

1 回答 1

1

Memcache API 中没有显式锁定功能,但是可以使用Compare-and-Set机制来实现。Guido 在这里有一个例子。但是,只有 Client 类公开了 CAS,但是从您的描述中不清楚为什么这对您不起作用。

于 2012-05-19T23:15:44.450 回答