Próbuję zoptymalizować mój kod i mam problem, którego nie rozumiem. Na każdej stronie mojej aplikacji internetowej pojawi się lista powiadomień podobnie jak nowy znacznik Facebooka. Tak więc, na każde żądanie, ten kod na początku działalności:Dlaczego moje całkowite RPC rośnie?
notification_query = db.Query(Ticker, keys_only=True)\
.filter('friends =',self.current_user.key().name())
self._notifications_future = notification_query.run()
Następnie, gdzie mogę znaleźć dobre miejsce, wzywam środkowy funkcję, która jest:
notification_keys = [future.parent() for future in self._notifications_future]
self._notifications = db.get_async(notification_keys)
końcu je wszystkie pobrać na koniec:
context.update({'notifications': self._notifications.get_result() })
Każda rzecz działa świetnie z wyjątkiem: jeśli zadzwonię środkowy funkcję w końcu funkcji żądanie użytkownika, otrzymuję to:
Dumb spot
i jeśli nazwać to, co myślę, że jest zoptymalizowany spot, uzyskać to:
Inteligentne Spot
Jak widać wykorzystanie interfejsu API jest podwojone dzięki tej "optymalizacji". Co tu się dzieje?
Numer wywoławczy 2, jest pierwszym fragmentem w obu przypadkach. Numer wywoławczy 12 w miejscu głupie to drugi fragment, a numer wywoławczy 12 w inteligentnym miejscu to drugi fragment. Ten ostatni przełącznik nie ma nic wspólnego z problemem, przetestowałem go.
pd: Czy Google obciąża mnie za czas, że zapytanie jest "bezczynne"?
UPDATE
Problem wydaje się być po prostu w dev_server, kiedy próbowałem ten sam przykład (inteligentnej) na appspot, mam to:
Pytania na appspot
Tutaj wszystko działa zgodnie z oczekiwaniami, rzeczy, które nazywane są run() lub get_async() nie blokuj innych rzeczy. Jak już powiedziałem, problem występuje tylko w dev_server. Mimo to byłoby miło zobaczyć tę funkcję działającą na localhost, dla bardziej efektywnego profilowania.
kodujesz i się uczysz, prawda? – fceruti
hmmm. dla mnie uważam, że sekwencja jest czymś w rodzaju kodu, a następnie koduje więcej, następnie przeklinam, następnie uderzam głową o ścianę, a następnie debuguję, a następnie koduję trochę więcej, a następnie uczę się odrobinę :) –