Разница между временем загрузки и временем работы в Python? - PullRequest
3 голосов
/ 24 июля 2011

Я цитирую часть документации по Python: «Программа не запускается быстрее при чтении из файла .pyc или .pyo, чем при чтении из файла .py; единственное, что быстрее в файлах .pyc или .pyo - это скорость, с которой они загружены. "

Я не понимаю, что это значит, когда он говорит, что это не влияет на время работы, но время загрузки? Может кто-нибудь объяснить это немного глубже, что я могу полностью понять?

Ответы [ 2 ]

3 голосов
/ 24 июля 2011

Когда вы импортируете модуль test.py, Python должен прочитать исходный код и преобразовать его в байт-код, который может выполнить Python.Это требует времени, но Python сохранит это в test.pyc.Этот байт-код является результатом разбиения вашего кода на более простые термины, которые можно запускать непосредственно на виртуальной машине CPython.

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

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

2 голосов
/ 24 июля 2011

Преобразование написанного вами кода Python в инструкции, понятные компьютеру, выполняется в два этапа:

  1. A этап компиляции .Необработанный код Python преобразуется в Python байт-код .Этот байт-код будет распознаваться интерпретатором Python в любой операционной системе, на любом оборудовании.Это то, что хранится в файле .pyo или .pyc.

  2. шаг интерпретации .Интерпретатор Python или, если вы предпочитаете виртуальную машину Python, интерпретирует байт-код и отправляет на компьютер инструкции низкого уровня.Эти инструкции низкого уровня будут разными в Linux и Windows, или между чипом Intel и AMD, и т. Д., Поэтому кто-то должен написать свой интерпретатор для каждого типа системы, на которой может работать Python.

Когда вы запускаете код из файла .pyc, шаг 1 уже завершен, поэтому выполнение переходит прямо к шагу 2. Но шаг 2 выполняется так же быстро, как и если бы вы скомпилировали его непосредственно перед запуском,Замедляет ли шаг компиляции ваш код, зависит от того, что делает ваша программа.Вы должны поэкспериментировать, чтобы увидеть, насколько велика разница, ожидающая компиляции вашего кода, но если вы пишете короткие сценарии, разница, вероятно, будет незаметна.

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