Как я могу генерировать уникальный идентификатор в Python? [дубликат]

Каждый раз, когда я смотрю на проблемы производительности, я думаю, что лучшая вещь сделать время, сколько времени Ваши страницы берут, чтобы работать, и затем посмотреть на самые медленные. Когда Вы получаете эти реальные метрики, можно часто улучшать производительность относительно самых медленных порядками величины, или путем фиксации медленного SQL-запроса или возможно закручивания кода немного.

Это, конечно, не требует никаких новых аппаратных средств или специального программного обеспечения, просто критический взгляд на существующем коде.

Однако это будет только работать так долго..., если Вы действительно заставите достаточно трафика поражать пределы Ваших аппаратных средств, и/или существует некоторый код, который является просто по сути медленным и действительно необходимым, необходимо будет посмотреть на другие возможности.

136
задан Jon B 26 March 2011 в 13:25
поделиться

6 ответов

Возможно, вам понадобятся функции UUID Python:

21.15. uuid - объекты UUID согласно RFC 4122

например:

import uuid
print uuid.uuid4()

7d529dd4-548b-4258-aa8e-23e34dc8d43d

105
ответ дан 23 November 2019 в 23:38
поделиться

unique и random исключают друг друга. возможно, вы этого хотите?

import random
def uniqueid():
    seed = random.getrandbits(32)
    while True:
       yield seed
       seed += 1

Использование:

unique_sequence = uniqueid()
id1 = next(unique_sequence)
id2 = next(unique_sequence)
id3 = next(unique_sequence)
ids = list(itertools.islice(unique_sequence, 1000))

нет двух одинаковых возвращаемых идентификаторов (Уникальных), и это основано на рандомизированном начальном значении

22
ответ дан 23 November 2019 в 23:38
поделиться

Возможно uuid.uuid4 () может сделать эту работу. См. uuid для получения дополнительной информации.

147
ответ дан 23 November 2019 в 23:38
поделиться
import time
import random
import socket
import hashlib

def guid( *args ):
    """
    Generates a universally unique ID.
    Any arguments only create more randomness.
    """
    t = long( time.time() * 1000 )
    r = long( random.random()*100000000000000000L )
    try:
        a = socket.gethostbyname( socket.gethostname() )
    except:
        # if we can't get a network address, just imagine one
        a = random.random()*100000000000000000L
    data = str(t)+' '+str(r)+' '+str(a)+' '+str(args)
    data = hashlib.md5(data).hexdigest()

    return data
6
ответ дан 23 November 2019 в 23:38
поделиться

Может быть, модуль uuid ?

4
ответ дан 23 November 2019 в 23:38
поделиться
import time
def new_id():
    time.sleep(0.000001)
    return time.time()

В моей системе time.time (), кажется, предлагает 6 значащих цифр после десятичной точки. При кратковременном сне он должен быть гарантированно уникальным с хотя бы умеренным количеством случайности в последних двух или трех цифрах.

Вы также можете хэшировать его, если беспокоитесь.

-6
ответ дан 23 November 2019 в 23:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: