воспроизведение в django + apache + mod_wsgi? - PullRequest
1 голос
/ 06 апреля 2010

У меня есть простая страница Django, на которой есть счетчик. Я использую Apache2 с mod_wsgi для его обслуживания.

Сначала, когда я захожу на эту страницу, счетчик показывает 0, как и должно быть. Во второй раз, когда я захожу на страницу, счетчик показывает 1 - опять же, это правильное поведение. Проблема начинается сейчас, потому что когда я вхожу на эту страницу в третий раз, я снова получаю 0.

Когда я обновляю, он идет между 0 и 1, явно используя некоторый кеш или около того. Если я подожду некоторое время, а затем попробую еще раз, он покажет 2 и 3, но останется с этими значениями до тех пор, пока этот кэш или что-то еще не будет сброшено, а затем счетчик продолжится.

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

Кстати, у меня не установлен движок кэширования в настройках django.

Ответы [ 2 ]

3 голосов
/ 06 апреля 2010

Количество экземпляров! = Обрабатывает * темы как предложено другим автором. Количество экземпляров == только процессы.

Читать:

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

Скорее всего, вы используете встроенный режим. Вместо этого вы должны использовать режим демона.

Не устанавливайте 'Процессы = 1', хотя, так или иначе, это значение по умолчанию, и использование этой опции имеет другие побочные эффекты, которые вам могут не понадобиться.

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

Также читайте:

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

с примером того, как настроить режим демона. Вам необходимо использовать обе директивы WSGIDaemonProcess и WSGIProcessGroup, просто недостаточно иметь только WSGIDaemonProcess.

1 голос
/ 06 апреля 2010

Вы используете несколько экземпляров вашего Django. Apache подключается случайным образом к одному из них.

Для тестирования попробуйте это в вашем apache.conf:

WSGIDaemonProcess mysite processes=1 maximum-requests=500 threads=1

(Возможно, вам понадобится больше процессов в производственном использовании.)

См. полная документация опций.

...