GithubHelp home page GithubHelp logo

thedrow / fastuuid Goto Github PK

View Code? Open in Web Editor NEW
137.0 6.0 14.0 81 KB

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

License: BSD 3-Clause "New" or "Revised" License

Rust 46.82% Python 49.62% Dockerfile 1.77% Shell 1.80%
python python3 python-3 python36 python37 python35 python-3-6 python-3-5 python-3-7 uuid

fastuuid's Introduction

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

fastuuid's People

Contributors

aviramha avatar davidhewitt avatar rchildre3 avatar soof-golan avatar thedrow avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

fastuuid's Issues

Maturin 0.9 broke sdist installation

Since fastuuid doesn't ship wheels for Python 3.9, we have to build it ourselves and the latest release of maturin from 2021-01-10 broke it:

87 Collecting fastuuid==0.5.1
88  Downloading https://pypi.vm.ag/root/pypi/%2Bf/3a7/0eb97b8fa9d32/fastuuid-0.5.1.tar.gz (12 kB)
89  Installing build dependencies: started
90  Installing build dependencies: finished with status 'done'
91  Getting requirements to build wheel: started
92  Getting requirements to build wheel: finished with status 'done'
93    Preparing wheel metadata: started
94    Preparing wheel metadata: finished with status 'error'
95    ERROR: Command errored out with exit status 1:
96     command: /app/bin/python /app/lib/python3.9/site-packages/pip/_vendor/pep517/_in_process.py prepare_metadata_for_build_wheel /tmp/tmpc1slfpbs
97         cwd: /tmp/pip-install-w1rcrg45/fastuuid_2c366dfd289049158eaf0ff20e159fa4
98    Complete output (6 lines):
99    ๐Ÿ’ฅ maturin failed
100      Caused by: Failed to parse Cargo.toml at /tmp/pip-install-w1rcrg45/fastuuid_2c366dfd289049158eaf0ff20e159fa4/Cargo.toml
101      Caused by: invalid type: sequence, expected a map for key `package.metadata.maturin.project-url` at line 41 column 1
102    Checking for Rust toolchain....
103    Running `maturin pep517 write-dist-info --metadata-directory /tmp/pip-modern-metadata-wsbdl4yf --interpreter /app/bin/python`
104    Error: Command '['maturin', 'pep517', 'write-dist-info', '--metadata-directory', '/tmp/pip-modern-metadata-wsbdl4yf', '--interpreter', '/app/bin/python']' returned non-zero exit status 1.
105    ----------------------------------------
106ERROR: Command errored out with exit status 1: /app/bin/python /app/lib/python3.9/site-packages/pip/_vendor/pep517/_in_process.py prepare_metadata_for_build_wheel /tmp/tmpc1slfpbs Check the logs for full command output.

I guess the simplest & quickest fix would be to just upload Python 3.9 wheels for 0.5.1.

ValidationError when using fastuuid with django's UUID field

Doing a simple

-from uuid import uuid4
+from fastuuid import uuid4

On a django field:

    id = models.UUIDField(primary_key=True, default=uuid4)

Gives me errors like the following:

django.core.exceptions.ValidationError: ['โ€œeb457f28-7cdc-4068-894b-1d0adfeb3e8dโ€ is not a valid UUID.']

Type hints

Hey,
would it be possible to add type hints to the package? They could mostly be copied from the stdlib (tyoeshed/stdlib). As an alternative thy could be added to typeshed/stubs.

What do you think?

Upgrade PyO3 to 0.10.0

There were many API changes between 0.8.5 to 0.10.0 and the build currently fails when upgrading.
We should adjust the code accordingly to gain from PyO3's new features and bug fixes.

Python 3.8 wheels

It seems that the Travis CI files already have support for Python3.8 but the wheels are non-existing on PyPI.

Wheels for python 3.11

Hello,
can you please release wheels for python 3.11 since the release is in a few days?

Thanks a lot!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.