Пока вы выполняете тривиальные объемы работы в своем «основном скрипте» (тот, который вы напрямую вызываете с помощью python
и который получает __name__
из __main__
), вам не нужно беспокоиться о «кэшировании предварительно скомпилированного байт-кода Python»: когда вы import foo
, foo.py
сохраняется на диске (в том же каталоге), что и foo.pyc
, при условии, что этот каталог доступен для записи вами, поэтому и без того дешевая компиляция в байт-код происходит один раз, и «навсегда» Python загрузит foo.pyc
непосредственно в каждый новый процесс, который выполняет import foo
-- внутри одного процесса, каждый import foo
, кроме первого, является просто быстрым поиском в словаре в памяти (словарь sys.module
). Основная идея повышения производительности в Python: убедиться, что каждый фрагмент существенного кода выполняется внутри def
инструкций в модулях — не на верхнем уровне модуля, в основном скрипте. , или спец. в пределах exec
и eval
операторов/выражений!-).
У меня нет эталонных тестов для PHP и Python, но я заметил, что Python продолжает довольно заметно оптимизироваться с каждым новым выпуском, поэтому убедитесь, что вы сравнили последний выпуск (в идеале 2.7, по крайней мере 2.6), если вы хотите увидеть «самые быстрые». Питон». Если вы еще не находите его достаточно быстрым, cython
(диалект Python, предназначенный для компиляции непосредственно в C, а затем в машинный код, с некоторыми ограничениями) на сегодняшний день является самым простым способом выборочной оптимизации тех модулей, профилирование которых показывает, что вам это нужно.
person
Alex Martelli
schedule
01.09.2010