random.choice()在同一秒返回相同的值,如何避免它呢?
我一直在寻找有关如何在python中生成随机数的类似问题。示例:类似的问题-但我不存在randomfunction每次返回相同值的问题。
我的随机数发生器工作正常,问题是在我认为不希望的同一秒调用函数时,它返回相同的值。
我的代码看起来像这样
def getRandomID():
token = ''
letters = "abcdefghiklmnopqrstuvwwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
for i in range(1,36):
token = token + random.choice(letters)
return token
正如我提到的,该函数在不同时间调用时返回不同的值,但是在同时调用该函数时返回相同的值。如何避免这个问题?
我在后端服务器中使用此功能为前端用户生成唯一ID,以使其插入数据库,因此无法控制发生这种情况的时间间隔。我必须具有随机令牌来映射数据库中的用户,以便能够使用数据库中的队列号正确地插入它们。
-
您可以使用
random.SystemRandom()
以下方法改善问题:import random sys_random = random.SystemRandom() def getRandomID(): token = '' letters = "abcdefghiklmnopqrstuvwwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890" for i in range(1, 36): token = token + sys_random.choice(letters) return token print(getRandomID())
这试图使用
os.urandom()
从操作系统提供的源生成随机数的函数。该.choices()
函数还可用于在单个调用中返回选择列表,从而避免了字符串串联:import random sys_random = random.SystemRandom() def getRandomID(): letters = "abcdefghiklmnopqrstuvwwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890" return ''.join(sys_random.choices(letters, k=35)) print(getRandomID())