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.