Domanda

Ciao. Sto lavorando su un app App Engine che coinvolge le query per l'API di Google Maps per la geocodifica. Google Maps non piace troppo richieste così ho messo un secondo di ritardo 1 tra ogni richiesta con time.sleep(1).

ho notato che le mie quote sono in via di esaurimento nel mio cruscotto GAE e ha deciso di eseguire un breve test:

import cProfile
import time

def foo():
    time.sleep(3)

cProfile.run('foo()')

Il che mi ha dato il seguente risultato:

   4 function calls in 3.003 CPU seconds
   Ordered by: standard name

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.000    0.000    3.003    3.003 <stdin>:1(foo)
        1    0.000    0.000    3.003    3.003 <string>:1(<module>)
        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}
        1    3.003    3.003    3.003    3.003 {time.sleep}

Così si dice che si tratta di consumo di 3 secondi CPU per un time.sleep(3). Ora mi chiedo se le chiamate come questi sono conteggiati verso i limiti di quota che GAE fornisce. E se lo fa, qual è l'altro modo di fare ritardi tra le chiamate alle API per la geocodifica?

Grazie.

È stato utile?

Soluzione

È certamente non vogliono essere cercando di dormire in un sistema che è stato progettato completamente da zero a richieste di finitura nel più breve tempo possibile in assoluto: D

Che cosa si potrebbe fare, invece, è creare un'attività per ogni geocode, (controllare il biblioteca differita). Che ci si vuole specificare una coda per questo compito, quindi basta impostare il limite di velocità sulla coda a tutto ciò che si sente le mappe geocoder potrebbero essere a proprio agio.

In questo modo ogni geocode verrà eseguito, e non sarai mai andare più veloce del limite di velocità impostato, e non c'è bisogno di fare qualsiasi impianto idraulico.

Altri suggerimenti

Sono abbastanza certo che le attività di coda contano anche verso l'utilizzo della CPU in GAP. Per quanto riguarda sleep(), non credo che ci saranno CPU "pena" da questo, ma penso che sia un cattivo stile.

sonno

Perché a tutti? Nel vostro compito, fare una sola geocoding e semplicemente postare un altro invocazione a te stesso in coda in 3secs. Vedere il parametro countdown quando si richiama http: // codice .google.com / intl / EL / appengine / docs / python / TaskQueue service / functions.html # add .

L'esperimento dimostra che il tempo conta time.sleep contro la vostra quota. Dai un'occhiata al sperimentale Task Queue API . Se il vostro compito non è utente iniziata, si potrebbe anche usare operazioni di cron , ma non so se questo funzionerà bene con intervalli così piccolo.

Issue che il giornalista non è stata fatturata per i secondi cpu sostenuti da time.sleep (), ma che si fanno vedere sulle loro appstats. E 'molto probabile appstats usi Cprofile pure. Il sonno è importante per le persone che cercano di fare i proxy meglio asincroni che avrebbe potuto usare per geocoding più grande insieme di elementi.

http://code.google.com/p/googleappengine/ problemi / dettaglio? id = 3291

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top