python - 在 Python App Engine 中,如何唯一标识在开发 SDK 上运行的应用程序实例?

标签 python google-app-engine

我的应用程序依赖于使用 urlfetch 进行通信的外部服务。我有多个开发人员,每个开发人员在添加功能时都在他们的开发计算机上运行自己的应用程序实例。每个开发人员实例都需要能够向外部服务唯一地标识自己,以便外部服务可以将其数据分开。

我需要一种方法来自动为应用程序内的每个开发人员生成唯一标识符。

是的,我可以让每个开发人员在其代码的变量中放置一个唯一的 ID,但我更希望它是自动的。

此外,我可能可以读取有关计算机上硬件的一些信息(例如 MAC 地址)并使用它,但我希望此代码仅使用在生产服务器上工作的内容,以便我最终也可以在生产服务器上使用它.

最佳答案

我见过的识别实例的唯一技巧是使用全局变量地址。

UNIQUE_INSTANCE_ID = {} # at module level
logging.debug("Instance %s." % (str("%X" % id( UNIQUE_INSTANCE_ID )).zfill(16)))

这似乎可以很好地唯一标识一个实例;但它只识别一个实例,而不是一台机器。因此,如果您重新启动实例,您将获得一个新的标识符。这可能是一个“功能”。

您还可以使用一些 META 变量;如果开发人员都用完了主目录,您可以从“PATH_TRANSLATED”中解析用户名。

至少,您可以将 UUID 注入(inject)数据填充的数据存储部分;在数据存储和缓存中存储元数据类型,并将该 UUID 包装到请求中。

from uuid import uuid4
from google.appengine.ext import db
from google.appengine.api import memcache

cache = memcache.Client()

class InstanceStamp(db.Model):
    code = db.StringProperty()

    INSTANCE_STAMP_KEY = "instance_stamp"

    @classmethod
    def get_stamp(cls):
        cache_key = cls.INSTANCE_STAMP_KEY 
        stamp_code = cache.get(cache_key)
        if stamp_code is None:
            code = uuid4().hex
            stamp = cls.get_or_insert('instance_stamp', code=code)
            if stamp is not None:
                cache.set(cache_key, stamp.code, 300)
                stamp_code = stamp.code
        return stamp_code

关于python - 在 Python App Engine 中,如何唯一标识在开发 SDK 上运行的应用程序实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7195930/

相关文章:

python - 如何在 C++ 中为 Cython 中的两种类型使用模板化函数?

java - Google App Engine DataNucleus 3.1.1 意外异常错误

google-app-engine - 在 Google App Engine 中,如何在处理表单提交时实现最终一致性?

python - 如何在 Python 中获取葡萄牙语字符?

python - 使用 FOR 循环时如何在 item.add_css() 中编写正确的 CSS?

python - 在安装过程中复制配置文件的正确方法?

java - 应用程序引擎 : jar in WEB-INF/lib but still getting java. lang.ClassNotFoundException

python - GAE Python : Search by Date using dateutil. 解析器

python - 无法导入 Google Cloud Datastore 库

python - 每当使用无服务器关闭 ec2 时发送电子邮件