/fastuuid

FastUUID is a library which provides CPython bindings to Rust's UUID library

Primary LanguageRustBSD 3-Clause "New" or "Revised" LicenseBSD-3-Clause

fastuuid

https://travis-ci.com/thedrow/fastuuid.svg?branch=master

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.5, 3.6, 3.7, 3.8 & 3.9.

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
  • Pickle support

PRs are welcome.