python - 如何同步对存储数据的访问?

标签 python google-app-engine thread-safety

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

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

我了解 Memcache 客户端 API,但我无法使用它,因为我必须先读取最新的时间戳,然后写入新的时间戳。

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

有什么建议吗?

提前谢谢您。 :)

最佳答案

Memcache API 中没有显式锁定功能,但您可以使用Compare-and-Set 来实现效果。机制。 Guido 有一篇带有示例的文章 here 。不过,只有 Client 类公开 CAS,但从您的描述中不清楚为什么这对您不起作用。

关于python - 如何同步对存储数据的访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10667338/

相关文章:

c++ - 并行操作 std::vector 的不同元素

c# - 无锁线程安全状态同步?

python - 如何使用谷歌应用引擎处理异常

python - Google App Engine (Python) - 数据存储正在复制实体

python - 删除由 Google App Engine 的 dev_appserver.py 生成的本地数据

java - 实体上的 Blob 属性会影响查询性能吗?

java - `Thread.checkAccess()`是 `Thread.suspend()`的适当替代品吗?

python - 在 Fedora 上运行 python 脚本时没有名为 lxml.html 的模块

Python如何包含另一个文件中的函数

python - 如何使用 python 将 float 舍入为固定小数部分