Skip to main content

Python bindings to Rust's UUID library.

Project description

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.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.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fastuuid-0.8.0.tar.gz (15.1 kB view hashes)

Uploaded source

Built Distributions

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Huawei Huawei PSF Sponsor Microsoft Microsoft PSF Sponsor NVIDIA NVIDIA PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page