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.
Calling
dir
on modules is expensive - in a benchmark, it took up 2% of the time when callingfreeze_time
, when_get_cached_module_attributes
accounted for 4% of the time.This commit hashes
dir
calls per module id. This drastically speeds it up. Running withpytest-benchmark
:We get the following:
Where
0001
is before this commit, and0002
is after: Mean time reduced 2,103 ms to 405 ms.This comes with a tradeoff, reflected in the added tests: Dynamically added attributes will not be picked up. For example:
Because the result of
dir
is cached, thedynamic_time_func
is not picked up.I leave it up to the maintainers to decide if this tradeoff is worthwhile, considering that there are some other existing blindspots (also shown in added tests).
This commit does not include the benchmark itself - if desired, it can trivially be added.