Agendar tareas con python

Posted on mié 18 julio 2012 in Tutorial Python • 2 min read

En Linux se pueden ejecutar procesos de forma periodica gracias a cron o en un momento determinado gracias a at.

En python se tiene una librería que permite ejecutar de forma periodica o en una fecha determinada al estilo de cron o at, la librería se llama APScheduler (Advanced Python Scheduler). La documentación de SPScheduler lo pueden revisar en este enlace.

El ejemplo a mostrar a continuación permite ejecutar 2 tareas, la primera tarea se ejecuta a intervalos de 1 minuto, la segunda tarea se ejecuta de lunes a viernes en una hora específica.

El código del ejemplo se muestra a continuación:

#!/usr/bin/env python

#Se importa Scheduler

from apscheduler.scheduler import Scheduler

#Se importa ctime y sleep

from time import ctime,sleep

#Se crea la instancia de la clase Scheduler

sched = Scheduler()

#Se crea una funcion con la tarea1, pero se dfine

#un decorador para la tarea para que sea periodica

#Cada minuto se ejecutara la tarea.

@sched.interval_schedule(minutes=1)

def Tarea1():

    #Muestra en pantalla la fecha y hora

    print "Se ejecuta cada minuto: %s" %ctime()

#Se crea la tarea2 al estilo cron por medio de un decorador cron

#que se ejecuta de lunes a viernes a las 9:40pm.

@sched.cron_schedule(day_of_week='mon-fri', hour=21,minute=30)

def Tarea2():

    #Se muestra en pantalla la hora del momento que se ejecuta la aplicacion.

    print "Se ejecuto a las : %s" %ctime()

#Se pasa la configuracion al scheduler

sched.configure()

#Se inicia el scheduler

sched.start()

#Se muestra las tareas definidas.

print sched.print_jobs()

#Se crea un ciclo de 10 iteraciones

#Donde se espera un minuto por cada iteracion

#Se muestra en pantalla las veces que se ejecuta.

for i in range(10):

    print "---- %s" %i

    sleep(60)

#Se detiene las tareas del scheduler al finalizar

#las iteraciones

sched.shutdown(wait=False)

La salida de la ejecución del programa se muestra a continuación:

ernesto@clara:~/bin/python/procesos$ sudo ./procesos2.py 

Jobstore default:

    Tarea1 (trigger: interval[0:01:00], next run at: 2012-07-18 21:27:59.911483)

    Tarea2 (trigger: cron[day_of_week='mon-fri', hour='21', minute='30'], next run at: 2012-07-18 21:30:00)

None

---- 0

Se ejecuta cada minuto: Wed Jul 18 21:27:59 2012

---- 1

Se ejecuta cada minuto: Wed Jul 18 21:28:59 2012

---- 2

Se ejecuta cada minuto: Wed Jul 18 21:29:59 2012

Se ejecuto a las : Wed Jul 18 21:30:00 2012

---- 3

Se ejecuta cada minuto: Wed Jul 18 21:30:59 2012

---- 4

Se ejecuta cada minuto: Wed Jul 18 21:31:59 2012

---- 5

Se ejecuta cada minuto: Wed Jul 18 21:32:59 2012

---- 6

Se ejecuta cada minuto: Wed Jul 18 21:33:59 2012

---- 7

Se ejecuta cada minuto: Wed Jul 18 21:34:59 2012

---- 8

Se ejecuta cada minuto: Wed Jul 18 21:35:59 2012

---- 9

Se ejecuta cada minuto: Wed Jul 18 21:36:59 2012

Con está librería se puede definir la ejecución de procesos a ciertos días y horas, o de forma periódica.

¡Haz tu donativo! Si te gustó el artículo puedes realizar un donativo con Bitcoin (BTC) usando la billetera digital de tu preferencia a la siguiente dirección: 17MtNybhdkA9GV3UNS6BTwPcuhjXoPrSzV

O Escaneando el código QR desde la billetera:

17MtNybhdkA9GV3UNS6BTwPcuhjXoPrSzV