Интерпретатор Python доли в предварительном ветвлении Apache / WSGI

Просто получение установленных инструментов недостаточно. Необходимо понять, как конкретная технология работает (как SVN) и как целое исходное дерево предположило для работы: лучшая структура, метки, ветвление, объединяясь и таким образом четвертый. Так как мы используем SVN, я рекомендую Книга Подрывной деятельности. Это имеет некоторые хорошие объяснения понятий управления исходным кодом.

6
задан Luke Murphey 27 August 2009 в 05:37
поделиться

1 ответ

Вы не можете запустить приложение WSGI во встроенном режиме в системах UNIX, будь то предварительная вилка или рабочий MPM, поскольку действительно будет несколько процессов. См.:

http://code.google.com/p/modwsgi/wiki/ProcessesAndThreading

Создание группы процессов демона, состоящей из одного процесса, и делегирование ему приложения WSGI должно достичь желаемого. Вам даже не нужно использовать WSGIApplicationGroup, если вы говорите только об одном смонтированном приложении WSGI. Однако, если вы хотите быть абсолютно уверены, вы также можете установить его.

Таким образом, конфигурация в VirtualHost будет такой:

WSGIDaemonProcess osvm
WSGIProcessGroup osvm
WSGIApplicationGroup %{GLOBAL}

WSGIScriptAlias / /var/convergedsecurity/apache/osvm.wsgi

Хотя 'process = 1' для WSGIDaemonProcess явно указывает на создание одного процесса, не указывайте вариант, хотя и просто оставьте его по умолчанию для одного процесса. Любое использование опции «процессы», даже если для одного процесса для 'wsgi.multiprocess' установлено значение True.

Вместо того, чтобы использовать ваше реальное приложение WSGI, я бы посоветовал вам протестировать следующую простую тестовую программу.

import cStringIO
import os

def application(environ, start_response):
    headers = []
    headers.append(('Content-Type', 'text/plain'))
    write = start_response('200 OK', headers)

    input = environ['wsgi.input']
    output = cStringIO.StringIO()

    print >> output, "PID: %s" % os.getpid()
    print >> output

    keys = environ.keys()
    keys.sort()
    for key in keys:
        print >> output, '%s: %s' % (key, repr(environ[key]))
    print >> output

    output.write(input.read(int(environ.get('CONTENT_LENGTH', '0'))))

    return [output.getvalue()]

В выводе будет PID значение всегда должно быть одинаковым. Флаг wsgi.multiprocess должен иметь значение False. Значение mod_wsgi.process_group должно быть тем, что вы когда-либо называли группой процессов демона. И mod_wsgi.application_group должна быть пустой строкой.

Если это не то, что вы видите, убедитесь, что вы действительно перезапустили Apache после внесения изменений в конфигурацию. Также добавьте:

LogLevel debug

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

9
ответ дан 10 December 2019 в 02:51
поделиться
Другие вопросы по тегам:

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