私は、同様にスケーリングできるPythonでランダムな文字列を生成する、よりpythonicな方法を見つけようとしています。通常、次のようなものが表示されます
''.join(random.choice(string.letters) for i in xrange(len))
長い文字列を生成したい場合は最悪です。
私はしばらく random.getrandombits について考えていて、それをビットの配列に変換する方法を考え出してから、それを 16 進エンコードします。Python 2.6 を使用して、文書化されていない bitarray オブジェクトに遭遇しました。どういうわけか私はそれを機能させました、そしてそれは本当に速いようです。
私のノートブックでは、約 3 秒で 50mil のランダムな文字列が生成されます。
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]
編集
heikogerlach さんは、文字数が奇数であることが問題の原因であると指摘しました。fromhex から常に偶数の 16 進数を送信するようにするための新しいコードが追加されました。
これを同じくらい高速に行うためのより良い方法があるかどうか、まだ興味があります。