在Python应用程序引擎中,如何唯一地标识运行在devsdk上的应用程序实例?

2024-06-16 13:49:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我的应用程序依赖于使用urlphetch与之通信的外部服务。我有多个开发人员在他们的开发计算机上运行他们自己的应用程序实例,同时他们还添加了一些特性。每个开发人员实例都需要能够向外部服务唯一地标识自己,以便外部服务可以保持它们的数据分离。在

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

是的,我可以让每个开发人员在他们代码中的变量中输入一个唯一的id,但我更希望它是自动的。在

另外,我可能会阅读一些有关计算机硬件的信息(比如MAC地址)并使用它,但是我希望这些代码只使用在生产服务器上工作的东西,这样我最终也可以在那里使用它。在


Tags: 数据实例方法代码信息id应用程序开发人员
2条回答

每个的字符串版本数据库键实例具有相同的前缀,并且每个开发人员实例的前缀都是唯一的。尽管它们都有相同的应用程序id,但每台机器的密钥编码版本是不同的。在

例如的字符串键Foo:1开一台机器是:

ahNkZXZ-bWVkaWFjb29sZXItYXBwcgkLEgNGb28YAQw

在另一台机器上是:

ahFzfm1lZGlhY29vbGVyLWFwcHIJCxIDRm9vGAEM

我不知道有多少字符(位?)of the key代表应用程序名,而不是对象的类型和id,所以我不认为只使用包含前N个字符的子字符串是正确的方法。在

第一次尝试:

def get_unique_id():
    return str(db.Key.from_path('UNIQUE_INSTANCE_ID', 1))

它所做的就是制造一个假的数据库键对于不存在的模型类型。在不同的机器上,这给出了一个不同的值,在同一台机器上,这个值总是相同的。在

更新:

正如@Nick Johnson指出的,这实际上并不像我预期的那样有效,也不能解决问题。我以为那是应用程序yaml在键中使用,但是用于键的appid是来自的appid应用程序yaml前缀取决于应用程序是在SDK中运行还是在HR数据存储中运行,因此这些键的字符串表示形式不同,因为它们中的appid不同。在

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

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

对于唯一标识实例来说,这似乎相当有效;但它只标识实例,而不是机器。因此,如果您重新启动实例,您将获得一个新的标识符。这可能是一个“特色”。在

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

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

^{pr2}$

相关问题 更多 >