我正面临着这个奇怪的问题。一些(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计算实例。
发布于 2020-06-11 21:07:55
我不知道为什么,但我实现了一个解决办法。
我给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_generatorhttps://stackoverflow.com/questions/62312607
复制相似问题