2012-03-02 3 views
4

Я знаю, что существуют фреймворки, но я пытаюсь использовать wsgi напрямую, чтобы улучшить свое понимание.Глобальные переменные в Python и Apache mod_wsgi

У меня есть обработчик wsgi, и вверху я объявила переменную i = 0.

В моей функции application(environ, start_response) я объявляю global i, затем я увеличиваю i всякий раз, когда нажимается кнопка.

Насколько я понимаю, состояние этой переменной сохраняется до тех пор, пока сервер работает, поэтому все пользователи веб-приложения видят то же самое i.

Если я объявляю i внутри функции application, то значение i сбрасывается до 0 в любое время, когда будет сделан запрос.

Мне интересно, как вы сохраняете i между запросами одного пользователя, но не сохраняете ли это на разных сеансах пользователей? Таким образом, один пользователь может создавать несколько сообщений, а i будет увеличиваться, но если другой пользователь посещает веб-приложение, они начинаются с i=0.

И я знаю, что вы можете хранить i в базе данных между сообщениями, но можно ли просто сохранить i в памяти между сообщениями?

+2

Для некоторых связанных с ними обзоров фона смотрите http://code.google.com/p/modwsgi/wiki/ProcessesAndThreading. Более релевантные части находятся в конце, но все же важно прочитать остальное для контекста. –

ответ

3

Веб-приложения, как правило, «shared-nothing». В контексте WSGI это означает, что вы не представляете, сколько раз ваше приложение (и счетчик с ним) будет создаваться; этот выбор зависит от сервера WSGI, который действует как контейнер вашего приложения.

Если вам нужно понятие пользовательских сеансов, вы должны его явно реализовать, как правило, поверх файлов cookie. Если вы хотите настойчивость, вам нужен компонент, который явно поддерживает его; который может быть общей базой данных, или он может копировать ваши сеансы cookie.

1

Добавить сессию WSGI middleware и сохранить их значение.

Смежные вопросы