Ускорение загрузки питона "импорт" - PullRequest
22 голосов
/ 06 января 2010

Я серьезно расстроен тем, как медленно запускается Python.Простой импорт более или менее базовых модулей занимает секунду, так как python запускает sys.path в поисках подходящих файлов (и генерирует 4 stat() вызовов - ["foo", "foo.py", "foo.pyc", "foo.so "] - для каждой проверки).В сложной проектной среде с множеством различных каталогов это может занять около 5 секунд - и все для запуска сценария, который может мгновенно завершиться сбоем.

Есть ли у людей предложения о том, как ускорить этот процесс?Например, один хак, который я видел, - это установить переменную окружения LD_PRELOAD_32 в библиотеку, которая кэширует результат вызовов ENOENT (например, неудачные вызовы stat()) между запусками.Конечно, это имеет все виды проблем (потенциально запутывающие непитоновские программы, отрицательное кеширование и т. Д.).

Ответы [ 5 ]

10 голосов
/ 06 января 2010

архивирование максимально возможного количества pyc файлов (с правильной структурой каталогов для пакетов) и размещение этого zip-файла в качестве самой первой записи в sys.path (на лучшем доступном локальном диске, в идеале) может ускорить время запуска много.

4 голосов
/ 06 января 2010

Первое, что приходит на ум:

  • Попробуйте меньший путь
  • Убедитесь, что ваши модули pyc, чтобы они загружались быстрее
  • Убедитесь, что вы не удваиваете импорт или не импортируете слишком много

Кроме этого, вы уверены, что дисковые операции вас утомляют? Ваш диск / операционная система действительно загружены или старые и медленные?

Может быть, дефрагментация в порядке?

2 голосов
/ 06 января 2010

Если у вас закончились опции, вы можете создать ramdisk для хранения ваших пакетов Python. RAM-диск отображается как каталог в вашей файловой системе, но на самом деле он отображается непосредственно в оперативную память вашего компьютера. Вот некоторые инструкции для Linux / Redhat.

Осторожно: виртуальный диск является нестабильным, поэтому вам также необходимо хранить резервную копию своих файлов на обычном жестком диске, в противном случае вы потеряете данные при выключении компьютера.

1 голос
/ 06 января 2010

Чего-то не хватает в вашей посылке - я никогда не видел, чтобы некоторые "более или менее" базовые модули занимали импорт за секунду, и я не запускаю Python на том, что я бы назвал самым современным оборудованием. Либо вы работаете на каком-то серьезно старом оборудовании, либо работаете на перегруженной машине, либо ваша ОС или установка Python каким-то образом не работает. Или вы не импортируете "базовые" модули.

Если это какая-либо из первых трех проблем, вам нужно найти корневую проблему для ее решения. Если это последнее, нам действительно нужно знать, какие конкретно пакеты могут быть полезны.

0 голосов
/ 28 июня 2019

При попытке ускорить процесс профилирование является ключевым. Иначе, как вы узнаете, какие части вашего кода действительно медленные?

Некоторое время назад я создал визуализатор профиля времени выполнения и импорта тунец , и я думаю, что это может быть полезно здесь. Просто создайте профиль импорта (с Python 3.7+) и запустите на нем тунца:

python3.7 -X importtime -c "import scipy" 2> scipy.log
tuna scipy.log

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...