Patch for builtin enum module to achieve best performance
Project description
fastenum
Based on python/cpython#17669 and python/cpython#16483
Patch for stdlib enum
that makes it fast.
How fast?
- ~10x faster
name
/value
access - ~6x faster access to enum members
- ~2x faster values positive check
- ~3x faster values negative check
- ~3x faster iteration
- ~100x faster new
Flags
andIntFlags
creation for Python 3.8 and below
Wow this is fast! How do I use it?
First, install it from PyPi using pip
pip install f-enum
or using poetry
poetry add f-enum
Then enable the patch just by calling fastenum.enable()
once at the start of your programm:
import fastenum
fastenum.enable()
You don't need to re-apply patch across different modules: once it's enabled, it'll work everywhere.
What's changed?
fastenum is designed to give effortless boost for all enums from stdlib. That means that none of optimizations should break existing code, thus requiring no changes other than installing and activating the library.
Here are summary of internal changes:
- Optimized
Enum.__new__
- Remove
EnumMeta.__getattr__
- Store
Enum.name
and.value
in members__dict__
for faster access - Replace
Enum._member_names_
with._unique_member_map_
for faster lookups and iteration (old arg still remains) - Replace
_EmumMeta._member_names
and._last_values
with.members
mapping (old args still remain) - Add support for direct setting and getting class attrs on
DynamicClassAttribute
without need to use slow__getattr__
- Various minor improvements
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file f-enum-0.2.0.tar.gz
.
File metadata
- Download URL: f-enum-0.2.0.tar.gz
- Upload date:
- Size: 10.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.13 CPython/3.10.1 Darwin/21.5.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3df8fdfad2dc7079a0ed6b0ec2b369b9f2dda358ef08c037a6a3e3c17e9a49e7 |
|
MD5 | ba03d058a4cdd54878b7fc13ce4a9cb9 |
|
BLAKE2b-256 | 73af8b421877bd10736d631a8795b6b90c56f6710b41f528e89bf1150b728a96 |
File details
Details for the file f_enum-0.2.0-py3-none-any.whl
.
File metadata
- Download URL: f_enum-0.2.0-py3-none-any.whl
- Upload date:
- Size: 9.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.13 CPython/3.10.1 Darwin/21.5.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 88eb831d75534c132eaea621f9e969d23a02d37130ebb5dec16a50f434aa20ea |
|
MD5 | 4e5e6f696a363d4480f66c47fa430743 |
|
BLAKE2b-256 | 37b2173d953c5ddf217c82a9dcf90d04447bdeadf1d4ef476918b1c784df84fa |