cpython/Lib/importlib
Miss Islington (bot) 65ed1b7429
[3.13] gh-117983: Defer import of threading for lazy module loading (GH-120233) (GH-121349)
gh-117983: Defer import of threading for lazy module loading (GH-120233)

As noted in gh-117983, the import importlib.util can be triggered at
interpreter startup under some circumstances, so adding threading makes
it a potentially obligatory load.
Lazy loading is not used in the stdlib, so this removes an unnecessary
load for the majority of users and slightly increases the cost of the
first lazily loaded module.

An obligatory threading load breaks gevent, which monkeypatches the
stdlib. Although unsupported, there doesn't seem to be an offsetting
benefit to breaking their use case.

For reference, here are benchmarks for the current main branch:

```
❯ hyperfine -w 8 './python -c "import importlib.util"'
Benchmark 1: ./python -c "import importlib.util"
  Time (mean ± σ):       9.7 ms ±   0.7 ms    [User: 7.7 ms, System: 1.8 ms]
  Range (min … max):     8.4 ms …  13.1 ms    313 runs
```

And with this patch:

```
❯ hyperfine -w 8 './python -c "import importlib.util"'
Benchmark 1: ./python -c "import importlib.util"
  Time (mean ± σ):       8.4 ms ±   0.7 ms    [User: 6.8 ms, System: 1.4 ms]
  Range (min … max):     7.2 ms …  11.7 ms    352 runs
```

Compare to:

```
❯ hyperfine -w 8 './python -c pass'
Benchmark 1: ./python -c pass
  Time (mean ± σ):       7.6 ms ±   0.6 ms    [User: 5.9 ms, System: 1.6 ms]
  Range (min … max):     6.7 ms …  11.3 ms    390 runs
```

This roughly halves the import time of importlib.util.
(cherry picked from commit 94f50f8ee6)

Co-authored-by: Chris Markiewicz <effigies@gmail.com>
2024-07-03 21:14:42 +00:00
..
metadata [3.13] gh-120910: Fix issue resolving relative paths outside site-packages. (GH-120911) (#120917) 2024-06-23 17:30:08 +00:00
resources [3.13] gh-106531: Apply changes from importlib_resources 6.3.2 (GH-117054) (#120014) 2024-06-04 10:54:59 -04:00
__init__.py gh-105407: Remove unused imports in the stdlib (#105411) 2023-06-06 21:13:24 +00:00
_abc.py gh-102515: Remove unused imports in the `Lib/` directory (#102516) 2023-03-08 11:45:38 +00:00
_bootstrap.py fix comment typo in importlib (#118567) 2024-05-04 14:46:32 +01:00
_bootstrap_external.py [3.13] gh-119311: Fix name mangling with PEP 695 generic classes (#119464) (#119643) 2024-05-28 11:03:33 -07:00
abc.py [3.13] gh-121279: Re-add prematurely removed import warnings to importlib.abc (#121281) 2024-07-03 11:06:20 +02:00
machinery.py gh-114099 - Add iOS framework loading machinery. (GH-116454) 2024-03-19 08:36:19 -04:00
readers.py bpo-46118: Move importlib.resources to its own package. (#30176) 2021-12-30 21:00:48 -05:00
simple.py bpo-46118: Move importlib.resources to its own package. (#30176) 2021-12-30 21:00:48 -05:00
util.py [3.13] gh-117983: Defer import of threading for lazy module loading (GH-120233) (GH-121349) 2024-07-03 21:14:42 +00:00