tgoop.com/pyproglib/7097
Create:
Last Update:
Last Update:
🐍 Как ускорить Python в больших проектах: lazy imports в действии
Когда весь код живёт в одном монорепозитории и модули доступны отовсюду, количество импортов быстро превращается в тысячи.
Что начинает происходить со временем:
— скрипты стартуют по 30–40 секунд
— Jupyter-ноутбуки грузятся 10–15 минут
— распределённые jobs тратят больше времени на import
, чем на сами вычисления
💡 Решение → Lazy imports
Модуль не загружается при import’е, а подменяется объектом LazyImport
.
Настоящий импорт происходит только тогда, когда имя реально используется в коде:
from foo import bar
# globals() now contains {"bar": LazyImport("foo", "bar")}.
# the foo module has not yet been resolved or evaluated
qux = bar()
# in the evaluation of the above statement, bar is retrieved
# from the globals() dict, causing foo to be imported and bar
# to be reassigned to foo.bar
Что это даёт:
→ Это не библиотека — это патч интерпретатора (форк CPython), но эффект огромный.
#буст