random.choice()在同一秒返回相同的值,如何避免它呢?

发布于 2021-01-29 16:29:59

我一直在寻找有关如何在python中生成随机数的类似问题。示例:类似的问题-但我不存在randomfunction每次返回相同值的问题。

我的随机数发生器工作正常,问题是在我认为不希望的同一秒调用函数时,它返回相同的值。

我的代码看起来像这样

def getRandomID():
    token = ''
    letters = "abcdefghiklmnopqrstuvwwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
    for i in range(1,36):
        token = token + random.choice(letters)
    return token

正如我提到的,该函数在不同时间调用时返回不同的值,但是在同时调用该函数时返回相同的值。如何避免这个问题?

我在后端服务器中使用此功能为前端用户生成唯一ID,以使其插入数据库,因此无法控制发生这种情况的时间间隔。我必须具有随机令牌来映射数据库中的用户,以便能够使用数据库中的队列号正确地插入它们。

关注者
0
被浏览
85
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您可以使用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())
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看