Запускает ли Google App Engine один экземпляр приложения на один запрос? или для всех запросов? - PullRequest
5 голосов
/ 05 мая 2011

Использование Google App Engine:

# more code ahead not shown
application = webapp.WSGIApplication([('/', Home)],
                                 debug=True)

def main():
    run_wsgi_app(application)

if __name__ == "__main__":
    main()

Если два разных пользователя запрашивают веб-страницу на двух разных компьютерах, будут вызваны два отдельных экземпляра сервера?

Или все время работает только один экземпляр сервера, который обрабатывает все запросы?

А если один пользователь дважды откроет веб-страницу в одном и том же браузере?

Редактировать :

Согласно ответам ниже, один экземпляр может обрабатывать запросы от разных пользователей по очереди. Затем рассмотрим следующую часть кода, взятую из примера, приведенного Google:

class User(db.Model):
    email = db.EmailProperty()
    nickname = db.StringProperty()

1, email и псевдоним здесь определены как переменные класса? 2. Все запросы, обрабатываемые одним и тем же экземпляром сервера, имеют одни и те же переменные и, таким образом, по ошибке мешают друг другу? (Скажем, электронная почта появляется на чужой странице)

пс. Я знаю, что я должен прочитать руководство и больше документов, и я делаю это, однако ответы опытного программиста действительно помогут мне понять быстрее и более, спасибо

Ответы [ 2 ]

4 голосов
/ 05 мая 2011

Экземпляр может обрабатывать много запросов в течение своего времени жизни. В поточной модели среды выполнения Python каждый экземпляр может обрабатывать только один запрос в любой момент времени. Если 2 запроса поступают одновременно, они могут обрабатываться один за другим одним экземпляром, или может быть создан второй экземпляр для обработки запроса.


EDIT:

Как правило, переменные, используемые каждым запросом, попадают в область действия метода .get() или .post() экземпляра RequestHandler и поэтому не могут "просачиваться" в другие запросы. Вы должны быть осторожны с использованием глобальных переменных в ваших сценариях, так как они будут кэшироваться в экземпляре и использоваться совместно между запросами. Не используйте глобальные переменные, не зная точно, почему вы хотите (что является хорошим советом для любого приложения, в этом отношении), и у вас все будет хорошо.

1 голос
/ 05 мая 2011

App Engine динамически создает и разбирает экземпляры на основе объема запроса.

С документы :

Приложения App Engine получают питание от любого числаслучаев в любой момент времени, в зависимости от объема запросов, полученных вашим приложением.По мере увеличения количества запросов к вашему приложению увеличивается количество включающих его экземпляров.

Каждый экземпляр имеет свою очередь для входящих запросов.App Engine отслеживает количество запросов, ожидающих в очереди каждого экземпляра.Если App Engine обнаруживает, что очереди для приложения становятся слишком длинными из-за увеличения нагрузки, он автоматически создает новый экземпляр приложения для обработки этой нагрузки.

App Engine масштабирует экземпляры в обратном порядке, когда объемы запросов уменьшаются.Таким образом, App Engine гарантирует, что все текущие экземпляры вашего приложения используются для оптимальной эффективности.Такое автоматическое масштабирование делает запуск App Engine таким экономичным.

Когда приложение используется не полностью, App Engine отключает связанные с ним экземпляры, но с готовностью перезагружает их, как только они необходимы.

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