Ускорение Первой Загрузки Страницы в django

О, и только для полноты, следующее является несколькими галочками быстрее, чем нормальная конкатенация:

Console.WriteLine(String.Concat(p.FirstName," ",p.LastName));
22
задан Graham Dumpleton 9 November 2009 в 22:19
поделиться

2 ответа

По умолчанию для Apache / mod_wsgi код приложения загружается только при первом запросе процесса, которому требуются эти приложения. Итак, первый шаг - настроить mod_wsgi для предварительной загрузки вашего кода при запуске процесса, а не только при первом запросе. Это можно сделать в mod_wsgi 2.X с помощью директивы WSGIImportScript.

Предполагая режим демона, который в любом случае является лучшим вариантом, это означает, что у вас будет что-то вроде:

# Define process group.

WSGIDaemonProcess django display-name=%{GROUP}

# Mount application.

WSGIScriptAlias / /usr/local/django/mysite/apache/django.wsgi

# Ensure application preloaded on process start. Must specify the
# process group and application group (Python interpreter) to use.

WSGIImportScript /usr/local/django/mysite/apache/django.wsgi \
  process-group=django application-group=%{GLOBAL}

<Directory /usr/local/django/mysite/apache>

    # Ensure application runs in same process group and application
    # group as was preloaded into on process start.

    WSGIProcessGroup django
    WSGIApplicationGroup %{GLOBAL}

    Order deny,allow
    Allow from all
</Directory>

Когда вы внесли изменение кода, вместо того, чтобы касаться Файл сценария WSGI, который проверяется только при следующем запросе, вместо этого отправляет сигнал SIGINT процессам в группе процессов демона.

С помощью опции 'display-name' для WSGIDaemonProcess вы можете определить, какие процессы с использованием стиля BSD ' ps 'программа. Если для 'display-name' установлено значение '% {GROUP}', 'ps' вывод должен показывать '(wsgi: django)' как имя процесса. Определите идентификатор процесса и выполните:

kill -SIGINT pid

Замените pid фактическим идентификатором процесса. Если в группе процессов демона несколько процессов, отправьте сигнал всем из них.

Не уверен, можно ли использовать killall для выполнения этого за один шаг. У меня возникла проблема с выполнением этого в MacOS X.

В mod_wsgi 3.X конфигурация может быть проще и вместо этого можно использовать:

# Define process group.

WSGIDaemonProcess django display-name=%{GROUP}

# Mount application and designate which process group and
# application group (Python interpreter) to run it in. As
# process group and application group named, this will have
# side effect of preloading application on process start.

WSGIScriptAlias / /usr/local/django/mysite/apache/django.wsgi \
  process-group=django application-group=%{GLOBAL}

<Directory /usr/local/django/mysite/apache>
    Order deny,allow
    Allow from all
</Directory>

То есть нет необходимости использовать отдельную директиву WSGIImportScript, как конкретную группу процессов и группу приложений, как аргументы WSGIScriptAlias ​​с побочным эффектом, заключающимся в предварительной загрузке приложения.

killall 'можно использовать для этого за один шаг. У меня возникли проблемы с выполнением этого на MacOS X.

В mod_wsgi 3.X конфигурация может быть проще и вместо этого можно использовать:

# Define process group.

WSGIDaemonProcess django display-name=%{GROUP}

# Mount application and designate which process group and
# application group (Python interpreter) to run it in. As
# process group and application group named, this will have
# side effect of preloading application on process start.

WSGIScriptAlias / /usr/local/django/mysite/apache/django.wsgi \
  process-group=django application-group=%{GLOBAL}

<Directory /usr/local/django/mysite/apache>
    Order deny,allow
    Allow from all
</Directory>

То есть нет необходимости использовать отдельную директиву WSGIImportScript, как конкретную группу процессов и группу приложений, как аргументы WSGIScriptAlias ​​с побочным эффектом, заключающимся в предварительной загрузке приложения.

killall 'можно использовать для этого за один шаг. У меня возникли проблемы с выполнением этого на MacOS X.

В mod_wsgi 3.X конфигурация может быть проще и вместо этого можно использовать:

# Define process group.

WSGIDaemonProcess django display-name=%{GROUP}

# Mount application and designate which process group and
# application group (Python interpreter) to run it in. As
# process group and application group named, this will have
# side effect of preloading application on process start.

WSGIScriptAlias / /usr/local/django/mysite/apache/django.wsgi \
  process-group=django application-group=%{GLOBAL}

<Directory /usr/local/django/mysite/apache>
    Order deny,allow
    Allow from all
</Directory>

То есть нет необходимости использовать отдельную директиву WSGIImportScript, как конкретную группу процессов и группу приложений, как аргументы WSGIScriptAlias ​​с побочным эффектом, заключающимся в предварительной загрузке приложения.

32
ответ дан 29 November 2019 в 05:04
поделиться

Как вы используете Django (mod_python vs mod_wsgi)?

Если вы используете mod_wsgi (в режиме демона), перезапуск Apache не требуется для перезагрузки приложения. Все, что вам нужно сделать, это обновить mtime вашего сценария wsgi (что легко делается с помощью touch ).

В документации mod_wsgi есть довольно подробное объяснение этого процесса:

ReloadingSourceCode

3
ответ дан 29 November 2019 в 05:04
поделиться
Другие вопросы по тегам:

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