Доля Python интерпретатор в Apache PreFork / WSGI

голоса
6

Я пытаюсь запустить приложение на Python внутри Apache (PreFork) с WSGI таким образом, что один интерпретатор Python будет использоваться. Это необходимо, поскольку приложение использует синхронизацию потоков для предотвращения гонки условий возникновения. Так как Apache PreFork порождает несколько процессов, код ветра не распределяется между переводчиками и, таким образом, синхронизация потоков не имеет никакого значения (т.е. каждый поток только видит его собственные замки, которые не имеют никакого отношения к другим процессам).

Вот настройки:

  • Apache 2.0 (PreFork)
  • WSGI
  • Python 2.5

Вот соответствующая конфигурация Apache:

WSGIApplicationGroup %{GLOBAL}
<VirtualHost _default_:80>

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

Alias /admin_media/ /var/www/html/admin_media/

<Directory /var/www/html/admin_media>
Order deny,allow
Allow from all
</Directory>

Alias /media/ /var/www/html/media/

<Directory /var/www/html/media>
Order deny,allow
Allow from all
</Directory>

</VirtualHost>

Вот то, что я пытался до сих пор (ни один из которых работал):

  1. Добавление WSGIApplicationGroup% {} ГЛОБАЛЬНОЙ
  2. Указание WSGIDaemonProcess и WSGIProcessGroup внутри виртуального хоста:

    WSGIDaemonProcess osvm нити = 50
    WSGIProcessGroup osvm

Неужели нет способа заставить Apache PreFork использовать один интерпретатор Python с WSGI? Документы предполагают, что вы можете с WSGIDaemonProcess и WSGIApplicationGroup варианты, но Apache все еще создает отдельный интерпретатор Python для каждого процесса.

Задан 27/08/2009 в 06:37
источник пользователем
На других языках...                            


1 ответов

голоса
9

Вы не можете иметь запуск приложения WSGI в интегрированном режиме на системах UNIX, будь то PreFork или работник 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

Хотя «процессов = 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 ошибок журнал о создании процесса и загрузки сценария, включая сведения о процессе групповых и групповых приложений вещи происходят для.

Для получения другой информации по отладке см:

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

Если проблемы по-прежнему, советуем вам перейти в список рассылки mod_wsgi на Google Groups.

Ответил 27/08/2009 в 07:07
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more