Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork33.3k
gh-85160: Optimized singledispatchmethod access (noticeable improvement).#23213
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
Uh oh!
There was an error while loading.Please reload this page.
Conversation
CaselIT commentedNov 10, 2020
Thanks for taking this up! |
This PR is stale because it has been open for 30 days with no activity. Remove stale label or comment or this will be closed in 5 days |
CaselIT commentedDec 16, 2020
Comment to avoid closure |
This PR is stale because it has been open for 30 days with no activity. |
@rhettinger sorry for bothering you but do you have enough bandwidth to review this or can you defer to someone else? |
CaselIT commentedSep 17, 2021
Not sure if there is anything we should do to allow this to be reviewed |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
On my slow system more modest, but an improvement:
11.24
2.27
to
5.83
3.54
I not that this is built on 3.10.0a2+ so there maybe further speed improvements when 3.11/3.12 is released. So a worthwhile change.
TeamSpen210 commentedMay 14, 2022
Since this is something that’ll have observable effects on objects, should this be documented? If you’re introspecting your objects, or are say concerned about memory usage it might be surprising behaviour. |
@mental32@AlexWaygood By accident I created an independent implementation of the singledispatchmethod improvement. In#106448 I added a performance comparison of this PR and the other one. I also added a test for the case of a class with slots (commit4e068d4). Feel free to pull that one into this branch. Both branches give a performance improvement over current main. Hopefully one of them gets accepted. |
| ifself.attrnameisnotNone: | ||
| attrname=self.attrname | ||
| try: | ||
| obj.__dict__[attrname]=_method | ||
| exceptAttributeError: | ||
| pass# not all objects have __dict__ (e.g. class defines slots) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
| ifself.attrnameisnotNone: | |
| attrname=self.attrname | |
| try: | |
| obj.__dict__[attrname]=_method | |
| exceptAttributeError: | |
| pass# not all objects have __dict__ (e.g. class defines slots) | |
| ifself.attrnameisnotNone: | |
| try: | |
| obj.__dict__[self.attrname]=_method | |
| exceptAttributeError: | |
| pass# not all objects have __dict__ (e.g. class defines slots) |
mental32 commentedJul 26, 2023 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
@eendebakpt thank you for continuing with this! for any changes or merging that you would like to see done is it okay for me to say "do whatever you need to do :)" and defer to you? (including closing this PR if the other one is sufficient in perf improvements) I don't think I have the time to pay attention to this is all |
Closing in favour of#107148 (in which you have been listed as a co-author :) |
Uh oh!
There was an error while loading.Please reload this page.
I benchmarked using the following code:
And got the following output:
I'm still curious if access could be further optimized clueless when it comes to ideas 😅
https://bugs.python.org/issue40988