debug_mode=ON

Buscar en

 
 

Tareas programadas en Google App Engine con Python

Escrito por plunchete hace 1 años bajo una licencia de Creative Commons Creative Commons License
1589 visitas. Etiquetas: python, cron, app-engine

Desde la versión 1.2.0 de Google App Engine este permite la creación de tareas programadas con cron. El soporte para tareas programadas en Google Ap Engine es una de las cosas más demandadas y esperadas de la plataforma, ya que hasta ese momento no había forma de hacer operaciones de forma asíncrona, tan necesarias en aplicaciones altamente escalables.

Para crear tareas programadas se debe crear un archivo cron.yaml a la altura del app.yaml que ya deberíamos tener. Si por el contrario estáis empezando con Google App Engine os recomiendo leer el artículo de gimenete Introducción a Google App Engine

En el archivo cron.yaml debemos definir las tareas programadas de nuestra aplicación. Un ejemplo de cron.yaml sería el siguiente:

cron:
- description: counting foo
  url: /apocalipto
  schedule: every wednesday of month 11:11
  timezone: Europe/Madrid
- description: execute pending tasks
  url: /task.queue
  schedule: every 2 minutes

Los campos url y schedule son obligatorios, mientras que description y timezone son optativos. Si no está presente el campo timezone se toma por defecto UTC. El campo timezone puede tomar múltiples valores.

Con este cron de ejemplo crearíamos dos tareas, una que se ejecutaría cada 24 horas y que llamaría a una clase nuestra que actualizaría un contador de usuarios y otra que se llamaría cada martes a las 10 de la mañana y enviaría un resumen, por email, de lo acontecido en la aplicación.

  • El campo url debe contener la URL del controlador al que queremos que llame la tarea programada. Google App Engine permite restringir las URLs a los usuarios admin en el archivo app.yaml, de tal forma que no puedan ser invocadas desde fuera si no se dispone de una cuenta de administrador, para más información sobre este punto recomiendo leer la documentación oficial.
  • El campo schedule marca cuándo se ejecuta la tarea.

El campo schedule

Google App Engine acepta dos formatos en los que introducir las fechas para las tareas programadas

every N (hours|mins|minutes)

Donde N es el número de horas o minutos que queremos que transcurra desde una llamada a la siguiente. El tiempo mínimo que permite Google App Engine es de 1 minuto. Ejemplos

every 5 minutes
every 12 hours

El otro formato sigue el siguiente patrón

("every"|ordinal) (days) "of" (monthspec) (time)

La siguiente tarea crearía una tarea programada que se ejecutaría cada lunes del mes de Marzo

every monday of march 09:00

Como en el ejemplo que hemos visto al principio podemos también crear una tarea programada que se ejecute todos los lunes de forma independiente al mes en el que nos encontremos

every monday of month 09:00

Pero Google App Engine nos permite ser más concretos todavía, indicando varios días a la semana por ejemplo o varios meses al año, como por ejemplo

every mon,fri of april 16:00
every monday of sep,oct,nov 10:00

Google app Engine nos permite ser más concretos, pudiendo ejecutar una tarea cada X día del mes. Por ejemplo la siguiente fecha ejecutaría una tarea cada primer viernes de mes

1st friday of month 10:00

O incluso varios. El siguiente ejemplo cearía una tarea programada los primeros y segundos Lunes y Jueves de cada mes

first,second mon,thu of month 10:00

Nota En el momento en el que este artículo ha sido escrito la documentación oficial contiene fechas con el formato

every monday 09:00

El formato no es correcto, da error al desplegar el cron. Si queremos una tarea que se haga todos los meses debemos incluir of month, así que quedaría de la siguiente forma

every monday of month 09:00

Actualizar las tareas cron del servidor

Google app engine permite actualizar las tareas haciendo deploy de la aplicación de forma normal, aunque también permite refrescar sólo las tareas programadas usando

appcfg.py update_cron carpeta/

Si lo que queremos es borrar todas las tareas de cron que tenemos basta con dejar el fichero cron.xml con un aspecto como el siguiente:

cron:

La consola de administración

En la consola de administración de Google app Engine se pueden ver las tareas de cron que hay en la aplicación, así como el estado y la fecha en la que fueron ejecutadas por última vez.

Imagen de la consola de administración

Para más información podéis echar un vistazo a la documentación oficial

 

¡Votalo! 3 votos
¡Compártelo!

        

&nbps;

&nbps;

plunchete

Sobre plunchete

He trabajado en Zaragoza, Luxemburgo y Barcelona. Participé como estudiante en el Google Summer of Code del 2007, concretamente con el proyecto Apache OpenJPA. Me interesa la programación en general y las metodologías ágiles.

 
Regístrate o haz login para participar.
¿Todavía no conoces debugmodeon?
debugmodeon es la red social para profesionales de la informática
descubre debugmodeon
 

1 comentarios en " Tareas programadas en Google App Engine con Python"

joradom
joradom escribió
hace 1 años

#1   

gracia plunchete, todavía no me habia dado tiempo a meterme con esto, pero seguro que me ahorará un monton de tiempo :)

 
 
 
 

© Copyright 2008-2009 debug_mode=ON | Aviso legal | Contacto | FAQ | ¿Quiénes somos? |