Понимание сохраняемости глобального объекта в приложениях Python WSGI

Рассмотрим следующий код в моем приложении WebApp2 в Google App Engine:

count = 0

class MyHandler(webapp2.RequestHandler):

    def get(self):

        global count
        count = count + 1
        print count

С каждым обновлением страницы счетчик увеличивается.

Я пришел из мира PHP, где каждый запрос был новой глобальной средой.Насколько я понимаю, здесь происходит следующее: поскольку я использую конфигурацию wsgi для WebApp2, Python не запускает новый процесс при каждом запросе. С другой стороны, если бы я использовал конфигурацию cgi, глобальная среда создавала бы экземпляр каждый раз заново, как PHP ...

Предполагая, что вышеизложенное верно (если нет, поправьте меня) ...

  1. Как я могу справиться со сценариями, в которых мне нужна глобальная переменная, которая сохранялась бы только на время жизни запроса? Я мог бы поместить переменную экземпляра в класс RequestHandler, но как насчет таких вещей, как служебные модули, которые я импортирую, которые используют глобальные переменные для таких вещей, как хранение объекта сообщения?
  2. Есть ли какой-то метод для сброса всех переменных или принудительного повторное создание среды?
  3. Сохраняется ли глобальная среда бесконечно или в какой-то момент она перезагружается?
  4. Является ли какой-либо из этих GAE специфичным, или глобальное сохранение wsgi работает одинаково в любом сценарии сервера?

РЕДАКТИРОВАТЬ:

Вот попытка использования threadlocal:

count = 0

mydata = threading.local()
mydata.count = 0

class MyHandler(webapp2.RequestHandler):

    def get(self):

        global count
        count = count + 1
        print count

        mydata.count = mydata.count + 1
        print mydata.count

Они также увеличиваются между запросами

12
задан Yarin 17 November 2011 в 17:50
поделиться