Skip to content

Commit

Permalink
gh-109653: Improve import time of importlib.metadata / email.utils (p…
Browse files Browse the repository at this point in the history
…ython/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.
  • Loading branch information
hauntsaninja authored and jaraco committed Mar 20, 2024
1 parent 913352a commit b4ce0ff
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 1 deletion.
5 changes: 4 additions & 1 deletion importlib_metadata/__init__.py
Expand Up @@ -3,7 +3,6 @@
import os
import re
import abc
import csv
import sys
import json
import zipp
Expand Down Expand Up @@ -522,6 +521,10 @@ def make_file(name, hash=None, size_str=None):

@pass_none
def make_files(lines):
# Delay csv import, since Distribution.files is not as widely used
# as other parts of importlib.metadata
import csv

return starmap(make_file, csv.reader(lines))

@pass_none
Expand Down
1 change: 1 addition & 0 deletions newsfragments/+.feature.rst
@@ -0,0 +1 @@
Improve import time (python/cpython#114664).

0 comments on commit b4ce0ff

Please sign in to comment.