【问题标题】:Static Methods and ThreadSafe Applications静态方法和线程安全应用程序
【发布时间】:2012-02-10 21:10:11
【问题描述】:

我目前正在将我的 GAE 应用程序从 Python 2.5 运行时转换到启用“ThreadSafe”的 Python 2.7 运行时。

目前我的数据访问方法如下所示:

@staticmethod
def GetByPermaLinkId(permaLinkId):
    result = memcache.get("entry-by-permalink-id:" + permaLinkId)

    if result is None:
        result = db.get(permaLinkId)
        memcache.set("entry-by-permalink-id:" + permaLinkId, result)

    return result

所以我想我有两个问题。

  1. 我的数据访问方法完全荒谬吗?

  2. 我的数据访问方法可以在“ThreadSafe”应用程序中使用吗?

我是 App Engine 和 Python 开发的超级新手,非常感谢您提供反馈。

谢谢!

【问题讨论】:

  • 识别可能不是线程安全的东西的简单方法是寻找“可变共享状态”。也就是说,它必须通过代码进行修改(此处为 true)和共享(不正确,因为您定义的变量仅适用于它们被调用的函数)。
  • 你好。我在 devcon5.blogspot.com 上发布了 GAE 的线程安全分析(尽管是针对 GAE/J),非常感谢我应该涵盖的任何 cmets 或其他问题。谢谢。

标签: python multithreading google-app-engine thread-safety


【解决方案1】:
  1. 缓存频繁请求的数据是个好主意,但是您真的想看看 Python 样式指南 PEP8 http://www.python.org/dev/peps/pep-0008/

  2. 是的,你的方法没问题。 python中的线程安全通常是多个线程访问共享数据的问题。您正在使用 memcache 来处理共享数据,并且据我所知,此用例中的 memcache 是线程安全的。您是否会尝试将结果缓存在全局变量中,然后会出现竞争条件,在这种情况下您可以使用 theading.Lock 来避免它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多