首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么要从GCP上的python生成重复的UUID?

问为什么要从GCP上的python生成重复的UUID?
EN

Stack Overflow用户
提问于 2020-06-10 20:32:52
回答 1查看 849关注 0票数 10

我正面临着这个奇怪的问题。一些(5%)我的芹菜任务正在悄悄地被丢弃。

在对芹菜日志进行挖掘时,我发现在某些情况下,为不同的任务生成相同的任务ID。自然,任何新任务都会用相同的任务ID覆盖现有任务;导致旧任务悄然删除(如果没有执行)。

在1.5小时内,同样的UUID被生成了3次。我做了一些随机抽样,在同一台机器上,在短短的时间内(1-2小时)就变成了这种情况。服务器每天生成大约100万个UUID。一个7位数的小数,而38位数是--可能的UUID数。

我在Linux上运行python3.6和celery 4.4.2。

芹菜使用蟒蛇的uuid.uuid4:参考文献

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

更新:

VM是运行ubuntu18LTS的标准Google计算实例。

EN

回答 1

Stack Overflow用户

发布于 2020-06-11 21:07:55

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

我给uuid.uuid4打了补丁。由于某些原因,我无法对celery.utils.uuid或kombu.utils.uuid做同样的事情。

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

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62312607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档