¿Cómo generar enteros únicos de 64 bits desde Python?

Necesito generar enteros únicos de 64 bits desde Python. He comprobado el módulo UUID . Pero los UUID que genera son enteros de 128 bits. Así que eso no funcionaría.

¿Conoces alguna forma de generar enteros únicos de 64 bits dentro de Python? Gracias.

solo enmascara el 128bit int

>>> import uuid >>> uuid.uuid4().int & (1<<64)-1 9518405196747027403L >>> uuid.uuid4().int & (1<<64)-1 12558137269921983654L 

Estos son más o menos aleatorios, por lo que tiene una pequeña posibilidad de colisión

Quizás los primeros 64 bits de uuid1 son más seguros de usar

 >>> uuid.uuid1().int>>64 9392468011745350111L >>> uuid.uuid1().int>>64 9407757923520418271L >>> uuid.uuid1().int>>64 9418928317413528031L 

Estos se basan en gran medida en el reloj, mucho menos aleatorio, pero la singularidad es mejor

64 bits únicos

¿Qué hay de malo en contar? Un simple contador creará valores únicos. Este es el más simple y es fácil asegurarse de que no repetirá un valor.

O, si el conteo no es lo suficientemente bueno, intente esto.

 >>> import random >>> random.getrandbits(64) 5316191164430650570L 

Dependiendo de cómo se genere y use su generador de números aleatorios, eso debería ser único.

Por supuesto, puede hacer esto incorrectamente y obtener una secuencia repetida de números aleatorios. Debe tenerse mucho cuidado con la forma en que maneja las semillas para un progtwig que comienza y se detiene.

Un número aleatorio de 64 bits del generador de números aleatorios del sistema operativo en lugar de un PRNG:

 >>> from struct import unpack; from os import urandom >>> unpack("!Q", urandom(8))[0] 12494068718269657783L 

Puede usar uuid4() que genera un único UUID de 128 bits aleatorio. Tenemos que ‘desplazamiento binario a la derecha’ ( >> ) cada entero de 128 bits generado por 64 bits (es decir, 128 - (128 - 64) ).

 from uuid import uuid4 bit_size = 64 sized_unique_id = uuid4().int >> bit_size print(sized_unique_id)