Есть более быстрый вариант по сравнению с тем, что упомянул jcdyer. Это занимает ~ 50% его самого быстрого метода.
from numpy.random.mtrand import RandomState
import binascii
rand = RandomState()
lo = 1000000000000000
hi = 999999999999999999
binascii.b2a_hex(rand.randint(lo, hi, 2).tostring())[:30]
>>> timeit.Timer("binascii.b2a_hex(rand.randint(lo,hi,2).tostring())[:30]", \
... 'from __main__ import lo,hi,rand,binascii').timeit()
1.648831844329834 <-- this is on python 2.6.6
2.253110885620117 <-- this on python 2.7.5
Если вы хотите в base64:
binascii.b2a_base64(rand.randint(lo, hi, 3).tostring())[:30]
Вы можете изменить параметр размера, передаваемый в randint (последний аргумент), чтобы изменить длину вывода в зависимости от ваших требований. Итак, для символа 60 символов:
binascii.b2a_hex(rand.randint(lo, hi, 4).tostring())[:60]