Я слышу пиронв 9.0.2 выпускается с большим улучшением времени запуска.
Я скоро попробовал, и я не чувствовал себя быстро. Поэтому я расследовал это с Python 3.7 новая функция.
В этой статье я представляю функцию и как ее использовать.
Время запуска ≒ Время импорта
Например, время исполнения Pipenv -h
намного больше времени, чтобы показать справочное сообщение.
Вообще говоря, когда приложение запускается, существует некоторый процесс запуска, такой как переменные среды загрузки или файлы конфигурации.
В случае приложения Python Module Module занимает большую часть времени запуска. Например, Pipenv --version
занял около 800 мс и Импорт Пипнв
занял 700 мс.
$ time local/py37/bin/python3 -c 'import pipenv' real 0m0.696s user 0m0.648s sys 0m0.048s $ time local/py37/bin/pipenv --version pipenv, version 9.0.3 real 0m0.812s user 0m0.761s sys 0m0.052s
Показать время импорта для модулей
Python 3.7 имеет новую функцию, чтобы показать время для импорта модулей.
Эта функция включена с -X Импорт времени
вариант или PythonProfileimportte
Переменная среды.
Например, вы можете профилировать время импорта Pipenv
python3.7 -X importtime -c 'import pipenv' 2> pipenv-imports
или
PYTHONPROFILEIMPORTTIME=1 pipenv --version 2>pipenv-imports
Вот пример вывода Пипенв –version.
Расследование времени импорта
Наконец вывод вы можете увидеть эти строки:
import time: self [us] | cumulative | imported package ... import time: 3246 | 578972 | pipenv.cli import time: 507 | 579479 | pipenv
В последней строке 579479 означает Импорт Пипнв
занял 579 479US.
При импортировании Pipenv многие другие модули импортируются. Из указанного выше примера вы можете увидеть Пипнв
Импорт Pipenv.cli
Отказ Подпункты отступаются с 2 пробелами.
Смотрите последнюю строчку снова. 507 означает, что только 507US был взят при запуске модуля Pipenv. 579 479 – 972US используется для поддержания.
Нахождение медленной части
Давайте найдем медленное подделка с вывода. Я выбрал некоторые строки.
import time: self [us] | cumulative | imported package ... import time: 86500 | 179327 | pkg_resources ... import time: 385 | 236655 | IPython import time: 22 | 236677 | IPython.core import time: 26 | 236703 | IPython.core.magic import time: 978 | 237680 | dotenv.ipython import time: 199 | 239032 | dotenv ... ... import time: 3246 | 578972 | pipenv.cli import time: 507 | 579479 | pipenv
pkg_resources.
Как видите, импортируя pkg_resources
медленный. И удивительно, pkg_resources
не с отступом; Это не поддержание пиронв
.
Это значит pkg_resources
импортируется Пипнв
Сценарий, а не модуль.
$ cat local/py37/bin/pipenv #!/home/inada-n/local/py37/bin/python3.7 # EASY-INSTALL-ENTRY-SCRIPT: 'pipenv==9.0.3','console_scripts','pipenv' __requires__ = 'pipenv==9.0.3' import re import sys from pkg_resources import load_entry_point if __name__ == '__main__': sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) sys.exit( load_entry_point('pipenv==9.0.3', 'console_scripts', 'pipenv')() )
Плохая новость: Импорт pkg_resources
медленный. Это известная проблема И трудно исправить, не нарушая обратную совместимость.
Хорошая новость: Вы можете избежать импорта pkg_resources!
$ local/py37/bin/pip install wheel $ local/py37/bin/pip install -U --force-reinstall pipenv $ time local/py37/bin/pipenv --version pipenv, version 9.0.3 real 0m0.704s user 0m0.653s sys 0m0.052s
Когда колесо установлено, PIP строит колесо и устанавливает из него.
Установка из колеса (.WHL) и из исходного пакета (.tar.gz) – разные процессы. При установке с колеса PKG_Resources не используется в скрипте:
$ cat local/py37/bin/pipenv #!/home/inada-n/local/py37/bin/python3.7 # -*- coding: utf-8 -*- import re import sys from pipenv import cli if __name__ == '__main__': sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) sys.exit(cli())
Айфон
См. Следующую часть.
import time: 385 | 236655 | IPython import time: 22 | 236677 | IPython.core import time: 26 | 236703 | IPython.core.magic import time: 978 | 237680 | dotenv.ipython import time: 199 | 239032 | dotenv
Пипнв
Импорт доценв
, Доценв
Импорт Доценв.ипитон
И он импортирует IPython
Отказ
Вот почему Пипнв
начинает медленно на моей среде; У меня установлен iPython.
Но почему iPython импортируется? Я прочитал источник дотенва, и я нашел это для расширения iPython.
Конечно, Pipenv и многие пользователи Dotenv не используют расширение iPython. Я сделал потянуть запрос до дотенва, который делает импорт iPython по требованию.
А поскольку пипнв имеет собственную копию дотенва, я сделал потянуть запрос к Pipenv, который удаляет Доценв. Испытание
полностью.
Заключение
Я могу сократить время на Pipenv --version
от 800 мс до 500 мс.
$ time local/py37/bin/pipenv --version pipenv, version 9.0.3 real 0m0.503s user 0m0.463s sys 0m0.040s
Профилирование времени импорта очень приятно расследовать и оптимизировать время запуска приложения.
Оригинал: “https://dev.to/methane/how-to-speed-up-python-application-startup-time-nkf”