如何在Python中生成唯一的64位整数?
我需要在Python中生成独特的64位整数。我查看了UUID模块,但是它生成的是128位的整数,所以这不合适。
你知道有什么方法可以在Python中生成64位的独特整数吗?谢谢。
5 个回答
9
这是从操作系统的随机数生成器获取的一个64位随机数,而不是使用伪随机数生成器(PRNG)。
>>> from struct import unpack; from os import urandom
>>> unpack("!Q", urandom(8))[0]
12494068718269657783L
32
64位唯一
计数有什么问题呢?一个简单的计数器就能生成唯一的值。这是最简单的方法,而且很容易确保不会重复。
或者,如果计数不够好,可以试试这个。
>>> import random
>>> random.getrandbits(64)
5316191164430650570L
根据你如何设置和使用随机数生成器,它应该是唯一的。
当然,你可以错误地使用它,导致随机数出现重复的情况。因此,在处理一个会启动和停止的程序时,如何管理种子非常重要,需要特别小心。
80
只需对这个128位的整数进行遮罩处理
>>> import uuid
>>> uuid.uuid4().int & (1<<64)-1
9518405196747027403L
>>> uuid.uuid4().int & (1<<64)-1
12558137269921983654L
这些数字基本上是随机的,所以你碰到重复的几率很小
也许使用uuid1的前64位会更安全一些
>>> uuid.uuid1().int>>64
9392468011745350111L
>>> uuid.uuid1().int>>64
9407757923520418271L
>>> uuid.uuid1().int>>64
9418928317413528031L
这些主要是基于时钟生成的,所以随机性小得多,但唯一性更好