Pregunta

Hola. Estoy trabajando en una aplicación de App Engine que implica consultas a la API de Google Maps para geocodificación. Google Maps no le gusta demasiado solicitudes por lo que poner un retardo de 1 segundo entre cada solicitud con time.sleep(1).

Me di cuenta de que mis cuotas se están agotando en mi tablero GAE y decidió ejecutar una prueba corta:

import cProfile
import time

def foo():
    time.sleep(3)

cProfile.run('foo()')

Lo que me dio el siguiente resultado:

   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}

Por lo tanto, dice que está consumiendo 3 segundos de CPU para un time.sleep(3). Ahora me pregunto si las llamadas como estas se cuentan hacia los límites de cuota que GAE proporciona. Y si lo hace, lo que es la otra forma de hacer que los retrasos entre llamadas a la API de codificación geográfica?

Gracias.

¿Fue útil?

Solución

Por supuesto que no quiero estar tratando de dormir en un sistema que está diseñado completamente desde la base a las solicitudes de acabado en el menor tiempo posible absoluta: D

Lo que podría hacer en su lugar, es crear una tarea para cada código geográfico, (echa un vistazo a la diferida biblioteca). Lo que quiere especificar una cola para esta tarea, a continuación, acaba de establecer el límite de velocidad en la cola a lo que usted siente los mapas geocodificador podrían ser cómodo.

De esta manera todos los códigos geográficos se ejecutará, y nunca se va a ir más rápido que el límite de velocidad se establece, y no se necesita hacer ningún fontanería.

Otros consejos

Estoy bastante seguro de que las tareas de cola también cuentan para el uso de la CPU en las BPA. En cuanto a sleep(), no creo que habrá CPU "penalización" de eso, pero yo creo que es un mal estilo.

¿Por qué el sueño en absoluto? En su tarea, hacer una sola geocodificación y simplemente publicar otra invocación a sí mismo en la cola en 3secs. Ver el countdown parámetro al invocar http: // código .google.com / intl / EL / appengine / docs / python / TaskQueue / functions.html # add.

Su experimento demuestra que el tiempo time.sleep cuenta para la cuota. Echar un vistazo a lo experimental cola de tareas API . Si su tarea no se ha iniciado el usuario, también se puede utilizar tareas cron , pero no sé si esto va a funcionar bien con intervalos tan pequeños.

Issue que el reportero no se ha facturado para el segundo cpu incurridos por time.sleep (), pero que aparecen en sus Appstats. Es muy probable AppStats usos cprofile también. El sueño es importante para las personas que tratan de hacer proxies mejor asíncronos que podía utilizar para la codificación geográfica más grande conjunto de elementos.

http://code.google.com/p/googleappengine/ temas / detalle? id = 3291

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top