Модель памяти для приложения apache / modwsgi в python? - PullRequest
4 голосов
/ 03 сентября 2011

В обычном приложении (например, в Windows), когда объекты / переменные создаются на глобальном уровне, они доступны всей программе в течение всего времени работы программы.

В веб-приложении, написанномв PHP, например, все переменные / объекты уничтожаются в конце скрипта, поэтому все должно быть записано в базу данных.

a) Так как насчет python, работающего под apache / modwsgi?Как это работает в отношении памяти?

б) Как вы создаете объекты, которые сохраняются между запросами веб-страниц, и как вы гарантируете, что в apache / modwsgi нет проблем с многопоточностью?

Ответы [ 2 ]

1 голос
/ 03 сентября 2011

Читайте следующее из официальной документации mod_wsgi:

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

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

0 голосов
/ 03 сентября 2011

Все глобалы Python создаются при импорте модуля.При повторном импорте модуля используются те же глобальные переменные.

Веб-серверы Python не выполняют потоки, а предварительно разветвляют процессы.Таким образом, нет проблем с многопоточностью в Apache.

Жизненный цикл процессов Python под Apache зависит.В Apache есть настройки, в которых количество дочерних процессов порождается, сохраняется в резерве и уничтожается.Это означает, что вы можете использовать глобальные переменные в процессах Python для кэширования (внутрипроцессный кеш), но процесс может завершиться после любого запроса, поэтому вы не можете поместить в глобальные переменные постоянные данные.Но процесс не обязательно должен прерываться, и в этом отношении Python намного более эффективен, чем PHP (исходный код не анализируется для каждого запроса - но для чтения изменений исходного кода во время разработки необходимо иметь сервер в режиме перезагрузки).

Поскольку глобальные переменные являются отдельными процессами и может быть N процессов, процессы совместно используют состояние "глобального сервера", используя такие механизмы, как memcached.

Обычно глобальные переменные Python содержат только

* 1010.*

Установка переменных, установленных во время инициализации процесса

Кэшированные данные (сеанс / нейтральный пользователь)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...