Почему у меня растет общее количество RPC? - PullRequest
5 голосов
/ 13 октября 2011

Я пытаюсь оптимизировать свой код, и у меня возникла проблема, которую я не совсем понимаю.На каждой странице моего веб-приложения будет список уведомлений, похожих на новый тикер Facebook.Итак, при каждом запросе я запускаю этот код в начале:

notification_query = db.Query(Ticker, keys_only=True)\
   .filter('friends =',self.current_user.key().name())
self._notifications_future = notification_query.run()

Затем, где я нахожу хорошее место, я вызываю функцию middle, которая:

notification_keys = [future.parent() for future in self._notifications_future]
self._notifications = db.get_async(notification_keys)

НаконецЯ получаю их все в конце:

context.update({'notifications': self._notifications.get_result() })

Все отлично работает, кроме этого: если я вызываю функцию middle в конце функции запроса, я получаю следующее:

Dumbspot

Dumb spot

И если я назову это в том, что я считаю оптимизированным, я получу следующее:

Smart spot

Smart spot

Как вы можете видеть, использование API удваивается благодаря этой "оптимизации".Что здесь происходит?

Позвоните по номеру 2, это первый фрагмент в обоих случаях.Номер вызова 12 в немом месте - второй фрагмент, а номер вызова 12 в умном месте - второй фрагмент.Этот последний переключатель не имеет отношения к проблеме, я проверял его.

pd: Google взимает плату за время, когда запрос "простаивает"?

ОБНОВЛЕНИЕ

Проблема, кажется, как раз в dev_server, когда я попробовал тот же пример (умная версия) на appspot, я получил это:

Запросы на appspot

appspot

Здесь все работает как положено, вещи, которые вызываются с помощью run () или get_async () , не блокируют другие вещи.Как я уже сказал, проблема только в dev_server.Тем не менее, было бы неплохо увидеть, как эта функция работает на локальном хосте для более эффективного профилирования.

Ответы [ 2 ]

3 голосов
/ 17 октября 2011

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

1 голос
/ 14 октября 2011

Ahhhh.При публикации материалов о движке приложения очень полезно указывать, находятся ли ваши результаты на сервере разработки или в производстве.Сервер разработки не обладает такими же характеристиками производительности, как производственные серверы, поэтому это не лучший способ для профилирования вашего приложения.На самом деле, я считаю, что индексы вообще не используются и что сервер dev является однопоточным, поэтому с ним нельзя обрабатывать параллельные запросы.На самом деле, если ваше приложение делает звонки самому себе, оно не будет работать вообще !

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