Skip to content

Commit b4ce0ff

Browse files
hauntsaninjajaraco
authored andcommitted
gh-109653: Improve import time of importlib.metadata / email.utils (python/cpython#114664)
My criterion for delayed imports is that they're only worth it if the majority of users of the module would benefit from it, otherwise you're just moving latency around unpredictably. mktime_tz is not used anywhere in the standard library and grep.app indicates it's not got much use in the ecosystem either. Distribution.files is not nearly as widely used as other importlib.metadata APIs, so we defer the csv import. Before: ``` λ hyperfine -w 8 './python -c "import importlib.metadata"' Benchmark 1: ./python -c "import importlib.metadata" Time (mean ± σ): 65.1 ms ± 0.5 ms [User: 55.3 ms, System: 9.8 ms] Range (min … max): 64.4 ms … 66.4 ms 44 runs ``` After: ``` λ hyperfine -w 8 './python -c "import importlib.metadata"' Benchmark 1: ./python -c "import importlib.metadata" Time (mean ± σ): 62.0 ms ± 0.3 ms [User: 52.5 ms, System: 9.6 ms] Range (min … max): 61.3 ms … 62.8 ms 46 runs ``` for about a 3ms saving with warm disk cache, maybe 7-11ms with cold disk cache.
1 parent 913352a commit b4ce0ff

2 files changed

Lines changed: 5 additions & 1 deletion

File tree

‎importlib_metadata/__init__.py‎

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
importos
44
importre
55
importabc
6-
importcsv
76
importsys
87
importjson
98
importzipp
@@ -522,6 +521,10 @@ def make_file(name, hash=None, size_str=None):
522521

523522
@pass_none
524523
defmake_files(lines):
524+
# Delay csv import, since Distribution.files is not as widely used
525+
# as other parts of importlib.metadata
526+
importcsv
527+
525528
returnstarmap(make_file, csv.reader(lines))
526529

527530
@pass_none

‎newsfragments/+.feature.rst‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Improve import time (python/cpython#114664).

0 commit comments

Comments
 (0)