Рассмотрим следующий код в приложении 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...
Предполагая, что это правильно (если нет, пожалуйста, исправьте меня)...
- Как я могу обрабатывать сценарии, где мне нужна глобальная переменная, которая сохраняется только для срока службы запроса? Я могу поместить переменную экземпляра в класс RequestHandler, но как насчет таких вещей, как модули утилиты, которые я импортирую, которые используют глобальные вары для таких вещей, как сохранение объекта сообщения?
- Есть ли какой-либо метод для reset всех переменных или принудительное повторное создание среды?
- Сохраняется ли глобальная среда неопределенно долго или сама она reset в какой-то момент?
- Является ли какой-либо из этих GAE конкретным, или глобальное сопротивление wsgi работает одинаково в любом сценарии сервера?
EDIT:
Здесь попытка использования 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
Они также увеличивают количество запросов