Как сгенерировать уникальные 64-битные целые числа из Python?
Мне нужно сгенерировать уникальные 64-битные целые числа из Python. Я проверил модуль UUID. Но UUID, который он генерирует, составляет 128 бит целых чисел. Так что это не сработает.
Знаете ли вы, каким образом можно генерировать 64-битные уникальные целые числа в Python? Спасибо.
Ответы
Ответ 1
просто замаскируйте 128-битный int
>>> import uuid
>>> uuid.uuid4().int & (1<<64)-1
9518405196747027403L
>>> uuid.uuid4().int & (1<<64)-1
12558137269921983654L
Это более или менее случайные, поэтому у вас есть крошечный шанс столкновения
Возможно, первые 64 бита uuid1 безопаснее использовать
>>> uuid.uuid1().int>>64
9392468011745350111L
>>> uuid.uuid1().int>>64
9407757923520418271L
>>> uuid.uuid1().int>>64
9418928317413528031L
В основном они основаны на часах, гораздо менее случайных, но уникальность лучше
Ответ 2
Уникальные 64 бита
Что случилось с подсчетом? Простой счетчик создаст уникальные значения. Это самый простой и легко убедиться, что вы не будете повторять значение.
Или, если подсчет недостаточно, попробуйте это.
>>> import random
>>> random.getrandbits(64)
5316191164430650570L
В зависимости от того, как вы используете семя и используете генератор случайных чисел, это должно быть уникальным.
Вы можете - конечно, сделать это неправильно и получить повторяющуюся последовательность случайных чисел. Необходимо тщательно следить за тем, как вы обрабатываете семена для программы, которая запускается и останавливается.
Ответ 3
64-разрядное случайное число от генератора случайных чисел ОС, а не PRNG:
>>> from struct import unpack; from os import urandom
>>> unpack("!Q", urandom(8))[0]
12494068718269657783L