fastuuid
FastUUID is a library which provides CPython bindings to Rust's UUID library.
The provided API is exactly as Python's builtin UUID class.
It is supported on Python 3.7, 3.8, 3.9, 3.10 & 3.11.
Why?
It is much faster than Python's pure-python implementation and it is stricter when parsing hexadecimal representation of UUIDs.
If you need to generate a lot of random UUIDs we also provide the uuid4_bulk() function which releases the GIL for the entire duration of the generation. This allows other threads to run while the library generates UUIDs.
Benchmarks
processor | machine | python compiler | python implementation | python implementation version | python version | python build | release | system | cpu |
---|---|---|---|---|---|---|---|---|---|
x86_64 | x86_64 | GCC 5.5.0 | CPython | 3.7.2 | 3.7.2 | default | 4.15.0-50-generic | Linux | Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz |
name | min | max | mean | stddev | median | iqr | outliers | ops | rounds | iterations |
---|---|---|---|---|---|---|---|---|---|---|
tests/test_benchmarks.py::test_parse_bytes_fastuuid | 8.770148269832134e-07 | 3.0054012313485146e-05 | 9.848993185755912e-07 | 6.654121944953314e-07 | 9.530049283057451e-07 | 2.6979250833392143e-08 | 515;8080 | 1015332.2082162144 | 149366 | 1 |
tests/test_benchmarks.py::test_parse_bytes_uuid | 9.00006853044033e-07 | 2.4181994376704097e-05 | 1.0102117337399724e-06 | 6.361040394445994e-07 | 9.739887900650501e-07 | 3.899913281202316e-08 | 1130;10702 | 989891.4916557473 | 198020 | 1 |
tests/test_benchmarks.py::test_parse_bytes_le_fastuuid | 9.00996383279562e-07 | 2.4662993382662535e-05 | 1.0116569599011118e-06 | 5.687526428398989e-07 | 9.840005077421665e-07 | 2.200249582529068e-08 | 703;9368 | 988477.3590622543 | 163052 | 1 |
tests/test_benchmarks.py::test_parse_bytes_le_uuid | 1.348991645500064e-06 | 3.5200006095692515e-05 | 1.5184524591452776e-06 | 9.295692916442362e-07 | 1.448992406949401e-06 | 3.897002898156643e-08 | 1620;12511 | 658565.2346092485 | 170271 | 1 |
tests/test_benchmarks.py::test_parse_fields_fastuuid | 9.819923434406519e-07 | 3.2625976018607616e-05 | 1.217285795660234e-06 | 1.0234898538816672e-06 | 1.087988493964076e-06 | 6.702612154185772e-08 | 3199;12487 | 821499.7690477591 | 143844 | 1 |
tests/test_benchmarks.py::test_parse_fields_uuid | 1.1137977708131076e-06 | 0.000147809402551502 | 1.2054474234359692e-06 | 5.093104655522965e-07 | 1.144595444202423e-06 | 6.060581654310231e-08 | 2304;5896 | 829567.4954861335 | 167983 | 5 |
tests/test_benchmarks.py::test_parse_hex_fastuuid | 9.870273061096668e-07 | 2.906599547713995e-05 | 1.11212962918218e-06 | 6.906885628642859e-07 | 1.0759977158159018e-06 | 3.0995579436421394e-08 | 577;8272 | 899175.7559191765 | 143288 | 1 |
tests/test_benchmarks.py::test_parse_hex_uuid | 1.3360113371163607e-06 | 2.6262016035616398e-05 | 1.4448148991822913e-06 | 7.064083638385458e-07 | 1.3989920262247324e-06 | 2.9016518965363503e-08 | 679;4802 | 692130.1826039868 | 82156 | 1 |
tests/test_benchmarks.py::test_parse_int_uuid | 5.448004230856896e-07 | 4.164349229540676e-06 | 6.099919819231937e-07 | 2.0401652680352933e-07 | 5.548994522541762e-07 | 4.430039552971725e-08 | 3607;3925 | 1639365.8107557097 | 87951 | 20 |
tests/test_benchmarks.py::test_parse_int_fastuuid | 8.950009942054749e-07 | 4.946498665958643e-05 | 1.0105578493921953e-06 | 6.873330198387691e-07 | 9.739887900650501e-07 | 2.1012965589761734e-08 | 529;12534 | 989552.4542226401 | 176088 | 1 |
tests/test_benchmarks.py::test_fast_uuidv3 | 5.410998710431158e-07 | 3.5570512409321965e-06 | 5.971385425220447e-07 | 1.672736409563351e-07 | 5.526497261598707e-07 | 2.949964255094524e-08 | 4865;6332 | 1674653.248434526 | 83508 | 20 |
tests/test_benchmarks.py::test_uuidv3 | 3.6269775591790676e-06 | 4.193797940388322e-05 | 3.933511159797234e-06 | 1.4521217506191846e-06 | 3.782013664022088e-06 | 6.00120984017849e-08 | 548;4193 | 254225.79455743768 | 53582 | 1 |
tests/test_benchmarks.py::test_fast_uuidv4 | 1.47343598655425e-07 | 2.069187758024782e-06 | 1.6777362874701377e-07 | 7.169360028617447e-08 | 1.5453133528353646e-07 | 8.188180800061673e-09 | 6101;11550 | 5960412.297619802 | 198413 | 32 |
tests/test_benchmarks.py::test_uuidv4 | 2.275977749377489e-06 | 5.939402035437524e-05 | 2.5699563458422217e-06 | 1.316784132061215e-06 | 2.38200300373137e-06 | 1.309963408857584e-07 | 2068;5815 | 389111.667837409 | 85610 | 1 |
tests/test_benchmarks.py::test_fast_uuidv4_bulk_threads | 0.0009843519947025925 | 0.007268004992511123 | 0.0014418828965801719 | 0.0007545185495019851 | 0.0012059269938617945 | 0.0003288870066171512 | 42;54 | 693.5375975204223 | 549 | 1 |
tests/test_benchmarks.py::test_fast_uuidv4_threads | 0.0030693279986735433 | 0.008087011985480785 | 0.004009611603774935 | 0.000715605913448762 | 0.0038650799833703786 | 0.0006588477554032579 | 53;19 | 249.40071478707026 | 273 | 1 |
tests/test_benchmarks.py::test_uuidv4_threads | 0.030999513022834435 | 0.06895541000994854 | 0.040025271589084616 | 0.009975862168373506 | 0.036475206492468715 | 0.008713199000339955 | 3;2 | 24.98421522947798 | 22 | 1 |
tests/test_benchmarks.py::test_fast_uuidv5 | 5.316498572938144e-07 | 4.090600123163313e-06 | 5.890041556925782e-07 | 1.8620985914996815e-07 | 5.419497028924525e-07 | 2.9799412004649576e-08 | 3998;6415 | 1697780.8905680121 | 88921 | 20 |
tests/test_benchmarks.py::test_uuidv5 | 3.7190038710832596e-06 | 5.8079982409253716e-05 | 4.403547300216035e-06 | 2.439066121654033e-06 | 3.910012310370803e-06 | 2.169981598854065e-07 | 2283;4139 | 227089.64655629804 | 57383 | 1 |
Run them yourself to verify.
What's Missing?
- UUIDv1 generation
PRs are welcome.