В поисках просветления - глобальные переменные в AppEngine (aeoid.get_current_user ()) - PullRequest
1 голос
/ 20 марта 2010

Это может быть вопрос 'Python Web Programming 101', но я не совсем понимаю, какой-то код в проекте aeoid (http://github.com/Arachnid/aeoid). вот код:

_current_user = None

def get_current_user():
    """Returns the currently logged in user, or None if no user is logged in."""
    global _current_user

    if not _current_user and 'aeoid.user' in os.environ:
        _current_user = User(None, _from_model_key=os.environ['aeoid.user'])
    return _current_user

Но, насколько я понимаю, глобальные переменные были глобальными! И поэтому разные запросы от разных пользователей могут (потенциально) получать доступ и обновлять одно и то же значение, отсюда и необходимость сеансов для хранения неглобальных переменных для каждого пользователя. Итак, что в коде выше, что мешает одному запросу поверить, что текущий пользователь настроен другим запросом? Извините, если это просто, я просто не думаю, что все работает.

Спасибо

Ответы [ 2 ]

2 голосов
/ 20 марта 2010

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

0 голосов
/ 20 марта 2010

Вы не единственный, кто запутался в глобальных переменных в appengine. Но я знаю, что os.environ уникален для каждого запроса, поэтому я думаю, что это может объяснить правильную работу этого кода. Если нет, то это может быть так, что модуль, в котором он находится, получает принудительную перезагрузку каким-то образом, трюк, который я тоже ищу для динамических настроек в моем проекте.

...