How fast is Chula's guid generation compared to uuid and randrange?
Chula comes with a guid generator class who’s implementation is a bit naive. Considering Python already has (probably much better) functionality builtin, I figured I’d see how fast they are.
Here’s the way I tested them:
# Python imports
from random import randrange
from uuid import uuid1, uuid4
import time
# Chula imports
from chula.guid import guid
count = 10000
def timeit(fcn):
def wrapper():
start = time.time()
fcn()
print('%s %fs' % (fcn.__name__.ljust(20), time.time() - start))
return wrapper
@timeit
def builtin_randrange():
for i in xrange(count):
x = randrange(100000000000000000000)
@timeit
def builtin_uuid1():
for i in xrange(count):
x = uuid1().hex
@timeit
def builtin_uuid4():
for i in xrange(count):
x = uuid4().hex
@timeit
def chula_guid():
for i in xrange(count):
x = guid()
if __name__ == '__main__':
builtin_randrange()
builtin_randrange()
builtin_uuid1()
builtin_uuid1()
builtin_uuid4()
builtin_uuid4()
chula_guid()
chula_guid()
Here are the results:
# python test.py
builtin_randrange 0.053161s
builtin_randrange 0.053091s
builtin_uuid1 0.495005s
builtin_uuid1 0.487182s
builtin_uuid4 0.382016s
builtin_uuid4 0.380982s
chula_guid 1.156092s
chula_guid 1.154981s
To finish things off… this one really surprised me:
# (seq 10000); do uuidgen > /dev/null; done
real 0m22.086s
user 0m0.560s
sys 0m4.750s
So the moral of the story, is that Chula’s guid generation isn’t particularly fast, but shelling out to uuidgen is somehow even slower.