Django WSGI демон режима синхронизации запросов - PullRequest
1 голос
/ 12 января 2011

Запуск appache2 со следующим /etc/httpd.conf:

<VirtualHost *:80>
    WSGIDaemonProcess myapp user=pq group=pq processes=2 threads=1
    WSGIProcessGroup myapp
    LogLevel debug

    <Directory /django/myapp/apache/>
        Order allow,deny
        Allow from all
    </Directory>

    WSGIScriptAlias / /django/myapp/apache/django.wsgi
</VirtualHost>

где это мой /django/myapp/apache/django.wsgi:

import os
import sys

sys.path.append('/django')
os.environ['PYTHONPATH'] = '/django'
os.environ['DJANGO_SETTINGS_MODULE'] = 'myapp.settings'

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

У меня есть следующий вид:

def sleep(request):
    print >> sys.stderr, '{', os.getpid()
    time.sleep(5)
    print >> sys.stderr, '}', os.getpid()
    return index(request)

Я делаю 4 одновременных запроса, и мой журнал ошибок показывает:

[Wed Jan 12 12:59:56 2011] [error] {17160
[Wed Jan 12 13:00:01 2011] [error] }17160
[Wed Jan 12 13:00:01 2011] [error] {17157
[Wed Jan 12 13:00:06 2011] [error] }17157
[Wed Jan 12 13:00:06 2011] [error] {17160
[Wed Jan 12 13:00:11 2011] [error] }17160
[Wed Jan 12 13:00:11 2011] [error] {17157
[Wed Jan 12 13:00:16 2011] [error] }17157

В основном мои запросы были синхронизированы для каждого веб-сервера (даже не для процесс).

Почему это?

Редактировать: это машина с одним процессором, и Apache2 скомпилирован Префорка ММП. У моего клиента было 4 вкладки в Chrome. Интересно, когда я пытаюсь это с завитком я получаю ожидаемое:

[Wed Jan 12 18:10:18 2011] [error] {17160
[Wed Jan 12 18:10:18 2011] [error] {17157
[Wed Jan 12 18:10:23 2011] [error] }17160
[Wed Jan 12 18:10:23 2011] [error] {17160
[Wed Jan 12 18:10:23 2011] [error] }17157
[Wed Jan 12 18:10:23 2011] [error] {17157
[Wed Jan 12 18:10:28 2011] [error] }17160
[Wed Jan 12 18:10:28 2011] [error] }17157

Edit2: похоже, это проблема синхронизации запросов Chrome. Мои (ограниченные) тесты показали, что это происходит только с Chrome и только при использовании вкладок. Несколько запросов на одной вкладке являются асинхронными.

...