gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 19:28:29 25 4
gpt4 key购买 nike

我的应用程序依赖于使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com