Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

Python bindings to Rust UUID

License

NotificationsYou must be signed in to change notification settings

aminalaee/uuid-utils

Repository files navigation

Package versionSupported Python versions


Python UUID implementation using Rust's UUID library.This will makeuuid4 function around 10x faster.

This package can be a drop-in replacement to the standard library UUIDwhich implements existing UUID versions like v4 in Rustand also adds draft UUID versions like v6.

Avaialble UUID versions:

  • uuid1 - Version 1 UUIDs using a timestamp and monotonic counter.
  • uuid3 - Version 3 UUIDs based on the MD5 hash of some data.
  • uuid4 - Version 4 UUIDs with random data.
  • uuid5 - Version 5 UUIDs based on the SHA1 hash of some data.
  • uuid6 - Version 6 UUIDs using a timestamp and monotonic counter.
  • uuid7 - Version 7 UUIDs using a Unix timestamp ordered by time.
  • uuid8 - Version 8 UUIDs using user-defined data.

Please note that UUID versions 6, 7 and 8 are still in draft RFC.

Installation

Usingpip:

$ pip install uuid-utils

or, usingconda:

$ conda install -c conda-forge uuid-utils

Example

>>> import uuid_utils as uuid>>># make a random UUID>>>uuid.uuid4()UUID('ffe95fcc-b818-4aca-a350-e0a35b9de6ec')>>># make a random UUID using a Unix timestamp which is time-ordered.>>>uuid.uuid7()UUID('018afa4a-0d21-7e6c-b857-012bc678552b')>>># make a UUID using a SHA-1 hash of a namespace UUID and a name>>> uuid.uuid5(uuid.NAMESPACE_DNS,'python.org')UUID('886313e1-3b8a-5372-9b90-0c9aee199e5d')>>># make a UUID using an MD5 hash of a namespace UUID and a name>>> uuid.uuid3(uuid.NAMESPACE_DNS,'python.org')UUID('6fa459ea-ee8a-3ca4-894e-db77e160355e')

Compatibility

In some cases, for example if you are usingDjango, you might needUUID instances to be returnedfrom the standrad-libraryuuid, not a customUUID class.In that case you can use theuuid_utils.compat which comes with a performance penaltyin comparison with theuuid_utils default behaviour, but is still faster than the standard-library.

>>>importuuid_utils.compatasuuid>>># make a random UUID>>>uuid.uuid4()UUID('ffe95fcc-b818-4aca-a350-e0a35b9de6ec')

Benchmarks

BenchmarkMinMaxMeanMin (+)Max (+)Mean (+)
UUID v10.0610.2990.1940.019 (3.3x)0.019 (15.4x)0.019 (10.1x)
UUID v30.2670.3070.2930.035 (7.6x)0.041 (7.5x)0.039 (7.5x)
UUID v40.1450.3010.2490.004 (38.5x)0.005 (54.8x)0.005 (53.0x)
UUID v50.0580.1890.1460.008 (7.6x)0.038 (5.0x)0.016 (9.0x)
UUID from hex0.1280.1390.1350.016 (8.2x)0.017 (8.0x)0.016 (8.3x)
UUID from bytes0.0310.1350.0930.016 (2.0x)0.016 (8.6x)0.016 (5.9x)
UUID from int0.0270.1020.0430.003 (8.3x)0.004 (25.0x)0.003 (12.4x)
UUID from fields0.0310.1620.0770.005 (6.0x)0.005 (30.6x)0.005 (14.7x)

Benchmark results might vary in different environments, but in most cases the uuid_utils should outperform stdlib uuid.

How to develop locally

$ make build$ maketest

Or:

$ RUSTFLAGS="--cfg uuid_unstable" maturin develop --release

[8]ページ先頭

©2009-2025 Movatter.jp