Я пытался найти более питонный способ генерирования случайной строки в питоне, который также может масштабироваться. Обычно я вижу что-то похожее на
''.join(random.choice(string.letters) for i in xrange(len))
Это отстой, если вы хотите сгенерировать длинную строку.
Я некоторое время думал о random.getrandombits и выяснял, как преобразовать это в массив битов, а затем закодировать в шестнадцатеричном виде. Используя python 2.6, я наткнулся на объект bitarray, который не задокументирован. Каким-то образом я заставил его работать, и это кажется очень быстрым.
Он генерирует случайную строку длиной 50 мил на моем ноутбуке всего за 3 секунды.
def rand1(leng):
nbits = leng * 6 + 1
bits = random.getrandbits(nbits)
uc = u"%0x" % bits
newlen = int(len(uc) / 2) * 2 # we have to make the string an even length
ba = bytearray.fromhex(uc[:newlen])
return base64.urlsafe_b64encode(str(ba))[:leng]
редактировать
Хейкогерлах указал, что причиной проблемы было нечетное количество символов. Добавлен новый код, чтобы он всегда отправлял от hex четное число шестнадцатеричных цифр.
Все еще любопытно, есть ли лучший способ сделать это так же быстро.