防止 Python 同一进程中的 uuid 冲突
Prevent uuid collision in Python same process
我在 Python 中生成 uuid,我注意到存在冲突。如果我使用 uuid.uuid1()
或 uuid.uuid4()
,我会发生冲突。
我在网上看了很多文章,但他们详细阐述了 "theory" 如果正确生成 UUID 冲突是不可能的。
但我还没有找到解释如何确保 UUID 生成正确完成的方法。
我怎样才能在 Python 3.7
之前执行此操作?
我看到了 Python 3.7 has a notion of UUID safety 但有没有办法在 3.7 之外做到这一点?
详情:
运行 Ubuntu 18.04,Jupyter Lab 中的 运行 Python 代码。
首先我们需要了解UUID是如何生成的。
UUID1是根据time + Host ID + random component
生成的。因此,如果您在同一时间在同一host上生成UUID1,您仅依赖 14 位的 random component
,这意味着您有 16384 次碰撞的机会。不是很高,但应该考虑。
UUID4 是完全随机的(128 位)并且不应发生冲突,如果它在您的情况下发生冲突,则可能是由于您系统上的某些问题,例如 issue。
您能否指定您的 os 以供进一步调查?
你有安装 os.urandom 吗?
我在 Python 中生成 uuid,我注意到存在冲突。如果我使用 uuid.uuid1()
或 uuid.uuid4()
,我会发生冲突。
我在网上看了很多文章,但他们详细阐述了 "theory" 如果正确生成 UUID 冲突是不可能的。
但我还没有找到解释如何确保 UUID 生成正确完成的方法。
我怎样才能在 Python 3.7
之前执行此操作?
我看到了 Python 3.7 has a notion of UUID safety 但有没有办法在 3.7 之外做到这一点?
详情:
运行 Ubuntu 18.04,Jupyter Lab 中的 运行 Python 代码。
首先我们需要了解UUID是如何生成的。
UUID1是根据time + Host ID + random component
生成的。因此,如果您在同一时间在同一host上生成UUID1,您仅依赖 14 位的 random component
,这意味着您有 16384 次碰撞的机会。不是很高,但应该考虑。
UUID4 是完全随机的(128 位)并且不应发生冲突,如果它在您的情况下发生冲突,则可能是由于您系统上的某些问题,例如 issue。
您能否指定您的 os 以供进一步调查? 你有安装 os.urandom 吗?