New submission from Alex Gaynor: Right now uuid4 can be implemented one of 3 ways:
- If there's a libuuid (and it's not OS X's) it uses that. - Fallback to os.urandom - If that raises an exception, fall back to the random module I propose to simplify this to _just_ use os.urandom always. Reasons: - Its security properties are more obviously correct. (There's a large comment in uuid.py about how libuuid doees the wrong thing with fork on OS X, who knows if it's correct on other platforms) - It's simpler. - It's faster: a_gaynor@miranda:~$ python -mtimeit -s "import uuid; import os; import ctypes" "_buffer = ctypes.create_string_buffer(16); uuid._uuid_generate_random(_buffer); bytes(_buffer.raw)" 100000 loops, best of 3: 10 usec per loop a_gaynor@miranda:~$ python -mtimeit -s "import uuid; import os; import ctypes" "_buffer = ctypes.create_string_buffer(16); uuid._uuid_generate_random(_buffer); bytes(_buffer.raw)" 100000 loops, best of 3: 10.3 usec per loop a_gaynor@miranda:~$ python -mtimeit -s "import uuid; import os; import ctypes" "_buffer = ctypes.create_string_buffer(16); uuid._uuid_generate_random(_buffer); bytes(_buffer.raw)" 100000 loops, best of 3: 9.99 usec per loop a_gaynor@miranda:~$ python -mtimeit -s "import uuid; import os; import ctypes" "_buffer = ctypes.create_string_buffer(16); uuid._uuid_generate_random(_buffer); bytes(_buffer.raw)" 100000 loops, best of 3: 10.2 usec per loop a_gaynor@miranda:~$ python -mtimeit -s "import uuid; import os; import ctypes" "_buffer = ctypes.create_string_buffer(16); uuid._uuid_generate_random(_buffer); bytes(_buffer.raw)" 100000 loops, best of 3: 10.2 usec per loop a_gaynor@miranda:~$ a_gaynor@miranda:~$ a_gaynor@miranda:~$ a_gaynor@miranda:~$ a_gaynor@miranda:~$ python -mtimeit -s "import uuid; import os; import ctypes" "os.urandom(16)" 100000 loops, best of 3: 8.94 usec per loop a_gaynor@miranda:~$ python -mtimeit -s "import uuid; import os; import ctypes" "os.urandom(16)" 100000 loops, best of 3: 8.92 usec per loop a_gaynor@miranda:~$ python -mtimeit -s "import uuid; import os; import ctypes" "os.urandom(16)" 100000 loops, best of 3: 8.97 usec per loop a_gaynor@miranda:~$ python -mtimeit -s "import uuid; import os; import ctypes" "os.urandom(16)" 100000 loops, best of 3: 8.93 usec per loop a_gaynor@miranda:~$ python -mtimeit -s "import uuid; import os; import ctypes" "os.urandom(16)" 100000 loops, best of 3: 8.94 usec per loop a_gaynor@miranda:~$ a_gaynor@miranda:~$ a_gaynor@miranda:~$ python --version Python 2.7.3 ---------- components: Library (Lib) files: uuid.diff keywords: needs review, patch messages: 253697 nosy: alex, dstufft priority: normal severity: normal status: open title: Always use os.urandom for generating uuid4s versions: Python 2.7, Python 3.5, Python 3.6 Added file: http://bugs.python.org/file40899/uuid.diff _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue25515> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com