Использует ли uWSGI предварительно скомпилированные файлы Python? - PullRequest
2 голосов
/ 05 марта 2019

Я использую uWSGI для развертывания моего приложения WSGI.Скомпилированы ли файлы Python для каждого запроса или они предварительно скомпилированы один раз?Я не вижу .pyc файлов.

Ответы [ 2 ]

2 голосов
/ 05 марта 2019

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

Итак, ваш основной сценарий wsgi будет перекомпилирован один раз для каждого нового процесса сервера.Как правило, приложение wsgi обслуживается как длительный процесс, который будет обрабатывать более одного запроса, поэтому даже тогда начальные издержки компиляции действительно не являются проблемой (короткий сценарий + компилируется только один раз для процесса) ...

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

Просто обратите внимание, что пользователь, под которым выполняется процесс, должен иметь права на запись в каталог вашего приложения, чтобы создавать файлы .pyc ... и, конечно, права на чтение файлов .pyc.

1 голос
/ 05 марта 2019

Если вы используете CPython, то по умолчанию нет, он не компилируется при каждом получении запроса, если вы не настроите его вручную.

По первому запросу uWSGI загрузит скрипты Python bytecode и перезагрузит его в 2 различных известных мне сценариях:

  1. Существует новый импорт, который не был загружен ранее (только новый модуль будет проанализирован и преобразован в байт-код).
  2. Вы явно запустили service uwsgi restart

Тем не менее, есть еще способ перезагружать скрипты Python при каждом запросе, подавляя его интерпретатором, например: python -B my_amazing_view.py

Подробнее см. Здесь:

  1. Что такое pycache
  2. Должен ли я генерировать .pyc
...