gpt4 book ai didi

python - 为什么在 GCP 上从 python 生成重复的 UUID?

转载 作者:行者123 更新时间:2023-12-03 15:51:24 25 4
gpt4 key购买 nike

我正面临这个奇怪的问题。我的一些(5%) celery 任务被默默地放弃了。

在 celery 日志中做一些挖掘,我发现在某些情况下,为不同的任务生成相同的任务 ID。自然地,任何新任务都会覆盖具有相同任务 ID 的现有任务;导致旧任务静默删除(如果它没有执行)。

在 1.5 小时内,生成了 3 次相同的 UUID。我做了一些随机抽样,结果在同一台机器上在很短的时间内(1-2 小时)出现了这种情况。服务器每天生成大约 100 万个 UUID。与 的数字相比的 7 位小数字38位 - 可能的 UUID 的数量。

我在 Linux VM 上运行 python 3.6 和 celery 4.4.2。

Celery 使用 python 的 uuid.uuid4 :Reference

我不知道如何从这里开始。某个版本的 python(或 linux 内核)中是否存在错误、某些配置问题或硬件/VM 错误?所有情况似乎都不太可能。

更新:

VM 是运行 ubuntu 18 LTS 的标准 Google Cloud Platform 计算实例。

最佳答案

我不知道为什么,但我实现了一个解决方法。

我猴补丁 uuid.uuid4 .出于某种原因,我无法为 celery.utils.uuid 做同样的事情。或 kombu.utils.uuid .

我制作了一个非常简单的随机数生成器,它连接系统纳米时间和主机名,并生成一个 UUID:

def __my_uuid_generator():
time_hex = float.hex(time.monotonic())[4:-4] # 13 chars
host = hex(abs(hash(socket.gethostname())))[2:] # 16 chars
hashed = bytes(f'{time_hex}{host}', 'ascii').hex()[:32] # always a 32 chars long hex string
return uuid.UUID(hashed)

# Monkey patch uuid4, because https://stackoverflow.com/q/62312607/1396264. Sigh!
uuid.uuid4 = __my_uuid_generator

关于python - 为什么在 GCP 上从 python 生成重复的 UUID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62312607/

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