Repository navigation
gh-93910: micro optimise enum attribute access - #94920
Closed
hauntsaninja wants to merge 1 commit into
Closed
hauntsaninja wants to merge 1 commit into
hauntsaninja wants to merge 1 commit into
Conversation
This halves access to attributes such as methods or _sunder_ name
Benchmarked using:
```
from enum import Enum
class Color(Enum):
RED = "Red"
BLUE = "Blue"
GREEN = "Green"
def f():
for _ in range(1000):
Color.RED
Color.BLUE
Color.GREEN
def g():
for _ in range(1000):
Color.RED._name_
Color.BLUE._name_
Color.GREEN._name_
import timeit
print(timeit.timeit('f()', number=10000, globals=globals()))
print(timeit.timeit('g()', number=10000, globals=globals()))
```
As of today morning:
```
6da988a λ ./python.exe bm_enum.py
1.499613167019561
1.5516562079428695
```
As of the latest enum change python#94913:
```
c20186c λ ./python.exe bm_enum.py
1.4998537090141326
16.095267291995697
```
As of this PR:
```
pythongh-93910-micro λ ./python.exe bm_enum.py
1.4983433339511976
8.81327024998609
```
hauntsaninja
marked this pull request as draft
July 17, 2022 02:51
hauntsaninja
marked this pull request as ready for review
July 17, 2022 03:07
Contributor
Author
|
Hmm, actually given that Note that there's a micro-optimisation we can do where we preserve condition order, but don't get - if isinstance(value, cls) and name not in self_dict and name in self._member_names_:
+ if isinstance(value, cls) and name not in super().__getattribute__('__dict__') and name in self._member_names_:This reduces benchmark time to 12s (from 16s on main, compared to 1.5s yesterday) and should be a strict improvement regardless of enum size. |
Member
|
Thank you for the effort, but it has been decided to not use |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This halves access to attributes such as methods or
_sunder_nameBenchmarked using:
As of today morning:
As of the latest enum change #94913:
As of this PR: