Estoy tratando de optimizar mi código, y me metí en un problema que no entiendo del todo. En cada página de mi aplicación web, habrá una lista de notificaciones muy similar al nuevo ticker de Facebook. Así, en cada petición, corro este código en el beggining:¿Por qué está aumentando mi RPC total?
notification_query = db.Query(Ticker, keys_only=True)\
.filter('friends =',self.current_user.key().name())
self._notifications_future = notification_query.run()
Entonces, ¿dónde encuentro un buen lugar, llamo a la función de media, que es:
notification_keys = [future.parent() for future in self._notifications_future]
self._notifications = db.get_async(notification_keys)
Finalmente me gustan todos fetch al final:
context.update({'notifications': self._notifications.get_result() })
Cada cosa funciona muy bien a excepción de lo siguiente: Si llamo a la función central en el final de la función de la solicitud, me sale esto:
punto Dumb
y si yo lo llamo en lo que creo que es un lugar optimizado, me sale esto:
Smart Spot
Como se puede ver el uso de API se duplica haciendo esta "optimización". ¿Que esta pasando aqui?
Número de llamada 2, es el primer fragmento en ambos casos. El número de llamada 12 en mudo es el segundo fragmento, y el número de llamada 12 en el punto inteligente es el segundo fragmento. Este último cambio no tiene nada que ver con el problema, lo he probado.
pd: ¿Google me cobra por el tiempo que la consulta está "inactiva"?
ACTUALIZACIÓN
El problema parece ser sólo en el dev_server, cuando probé el mismo ejemplo (versión inteligente) en appspot, tengo esto:
consultas en la appspot
Aquí todo funciona como se esperaba, las cosas que se llaman con ejecutar() o get_async() no bloquee otras cosas. Como dije, el problema está solo en dev_server. Aún así, sería bueno ver que esta función funciona en localhost, para un perfil más efectivo.
código y aprende, ¿verdad? – fceruti
hmmm. para mí, creo que la secuencia es algo así como código, luego código un poco más, luego maldición, luego golpear mi cabeza contra la pared, luego depurar, luego codificar un poco más, luego aprender un poco :) –