【问题标题】:Get consistent ID for Python script, but different every run为 Python 脚本获取一致的 ID,但每次运行都不同
【发布时间】:2018-04-26 21:43:13
【问题描述】:

我需要一个函数来在 Python 脚本中生成/返回唯一 ID,但我需要它来满足一些要求:

  • 每次运行都必须不同
  • 在一次运行中必须是相同的值,即使:
    • 多个类调用它
    • 一次运行中的多个线程 (xdist) 调用它
    • 对它的所有现有引用都超出了范围
  • 如果脚本的两个实例同时运行,每个实例都有自己的 ID。

我查看了 uuid 包,但每次调用方法时它都会返回不同的 ID。如何让 ID 在整个运行过程中保持一致?

【问题讨论】:

  • 您几乎已经有了答案:在运行开始时创建唯一 ID,将其存储在本地(实例)变量中,然后引用该变量。

标签: python xdist


【解决方案1】:

只需将 ID 放入变量中并在任何地方使用它。

如果您的程序很大,并且您希望以更简单的方式访问它,请创建一个小模块来存储它,例如 uniqid.py(或将其放入一些通用实用程序模块中):

import uuid

uniqid = str(uuid.uuid4())

那么只要你需要你的身份证就可以了

from uniqid import uniqid

print(uniqid)

即使由多个文件导入,模块也只会实例化一次。

【讨论】:

  • 我试过了,当我运行单线程时它可以工作。但是当我用 xdist 打开多个线程时,uniqid 在程序的不同部分显示不同的值。 (在我的例子中,conftest.py 中的设置方法和测试用例中的值不同)
  • 你确定“xdist”使用线程,而不是多进程吗?如果它使用多个进程,并且没有从同一个进程或其他进程中 fork() 它们,则该模块将为每个进程单独加载。这将对应于您提到的“两个实例”案例。如果您仍然希望这些实例获得相同的 ID,那么这将不是一个普通的 Python 问题,而是一个关于 xdist 的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-24
  • 1970-01-01
  • 2023-02-19
  • 1970-01-01
相关资源
最近更新 更多