fastuuid
fastuuid copied to clipboard
FastUUID is a library which provides CPython bindings to Rust's UUID library
fastuuid
.. image:: https://travis-ci.com/thedrow/fastuuid.svg?branch=master :target: https://travis-ci.com/thedrow/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.
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.