New submission from Matt Chaput <m...@whoosh.ca>:

Currently the 'uuid' module uses os.urandom (in the absence of a system UUID 
generation function) to generate random UUIDs in the uuid.uudi4() function. 
This patch changes the implementation of uuid4() to use random.getrandbits() as 
the source of randomness instead, for the following reasons:

* In my quick tests, using getrandbits() is much faster on Windows and Linux. 
Some applications do need to generate UUIDs quickly.

  >>> setup = "import uuid, os, random"
  >>> ur = "uuid.UUID(bytes=os.urandom(16), version=4)"
  >>> grb = "uuid.UUID(int=random.getrandbits(128), version=4)"
  >>> # Windows --------
  >>> timeit.Timer(ur, setup).timeit()
  22.861042160383903
  >>> timeit.Timer(grb, setup).timeit()
  3.8689128309085135
  >>> # Linux --------
  >>> timeit.Timer(ur, setup).timeit()
  29.32686185836792
  >> timeit.Timer(grb, setup).timeit()
  3.7429409027099609

* The patched code is cleaner. It avoids the try...finally required by the 
possibly unavailable os.urandom function, and the fallback to generating random 
bytes.

----------
components: Library (Lib)
files: fastuuid4.patch
keywords: patch
messages: 144087
nosy: mattchaput
priority: normal
severity: normal
status: open
title: Using getrandbits() in uuid.uuid4() is faster and more readable
type: performance
Added file: http://bugs.python.org/file23163/fastuuid4.patch

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue12986>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to