Нужно ли создавать файлы * .pyc при развертывании?

При разработке веб-приложения Python (Flask /uWSGI) и его запуске на моем локальном компьютере интерпретатор генерирует файлы *.pyc , Насколько я понимаю, эти скомпилированные файлы могут ускорить загрузку , но не обязательно запустить быстрее.

Когда я внедряю это же приложение в производство, оно запускается под учетной записью пользователя, у которого нет прав на запись в локальной файловой системе. Не существует pyc-файлов, предназначенных для управления исходным кодом, и не предпринимается никаких усилий для их генерации во время развертывания. Даже если Python хочет написать pyc-файл во время выполнения, он не сможет.

Недавно я начал задаваться вопросом, оказывает ли это какое-либо ощутимое влияние на производительность приложения, либо с точки зрения самого первого просмотра страницы после запуска процесса, либо постоянно в течение всего срока его службы.

Должен ли я добавить python -m compileall как часть моих сценариев развертывания?

4 голоса | спросил smitelli 25 FebruaryEurope/MoscowbThu, 25 Feb 2016 07:10:35 +0300000000amThu, 25 Feb 2016 07:10:35 +030016 2016, 07:10:35

1 ответ


0

Конечно, вы можете выполнить прекомпиляцию в .pyc, поскольку это ничего не повредит.

Это повлияет на первую или n-ю загрузку страницы? Предполагается, что Flask /WSGI работает как постоянный процесс, а не вообще. К моменту запроса первой страницы все модули Python уже будут загружены в память (как байт-код). Таким образом, время запуска сервера будет зависеть от отсутствия предварительной компиляции файлов.

Однако, если по какой-то причине новый процесс Python вызывается для каждого запроса страницы, тогда да, (вероятно) будет заметная разница в производительности, и было бы лучше предварительно скомпилировать.

Как сказал Клаус в вышеприведенных комментариях, только в другой раз может быть затронута загрузка страницы, если случится, что функция попытается импортировать модуль, который еще не был импортирован. Это потребует, чтобы модуль был проанализирован и преобразован в байт-код, а затем загружен в память, прежде чем он сможет продолжить.

ответил OozeMeister 25 FebruaryEurope/MoscowbThu, 25 Feb 2016 08:41:25 +0300000000amThu, 25 Feb 2016 08:41:25 +030016 2016, 08:41:25

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132