modules from examples example another __all__ python python-2.7 scheduler

from - Script de Python para hacer algo al mismo tiempo todos los días



python modules list (4)

Esta pregunta ya tiene una respuesta aquí:

Tengo un script python de larga duración que quiero hacer algo a la 01:00 todas las mañanas.

He estado mirando el módulo sched y el objeto Timer pero no veo cómo usarlos para lograrlo.


APScheduler puede ser lo que buscas.

from datetime import date from apscheduler.scheduler import Scheduler # Start the scheduler sched = Scheduler() sched.start() # Define the function that is to be executed def my_job(text): print text # The job will be executed on November 6th, 2009 exec_date = date(2009, 11, 6) # Store the job in a variable in case we want to cancel it job = sched.add_date_job(my_job, exec_date, [''text'']) # The job will be executed on November 6th, 2009 at 16:30:05 job = sched.add_date_job(my_job, datetime(2009, 11, 6, 16, 30, 5), [''text''])

https://apscheduler.readthedocs.io/en/latest/

Puede conseguir que programe otra ejecución incorporándola en la función que está programando.


Necesitaba algo similar para una tarea. Este es el código que escribí: calcula el día siguiente y cambia el tiempo a lo que sea necesario y encuentra segundos entre el tiempo actual y el siguiente horario programado.

import datetime as dt def my_job(): print "hello world" nextDay = dt.datetime.now() + dt.timedelta(days=1) dateString = nextDay.strftime(''%d-%m-%Y'') + " 01-00-00" newDate = nextDay.strptime(dateString,''%d-%m-%Y %H-%M-%S'') delay = (newDate - dt.datetime.now()).total_seconds() Timer(delay,my_job,()).start()


Pasé bastante tiempo buscando lanzar un programa de Python simple a la 01:00. Por alguna razón, no pude hacer que cron lo lanzara y APScheduler parecía bastante complejo para algo que debería ser simple. El horario ( https://pypi.python.org/pypi/schedule ) parecía correcto.

Deberá instalar su biblioteca de Python:

pip install schedule

Esto se modifica desde su programa de ejemplo:

import schedule import time def job(t): print "I''m working...", t return schedule.every().day.at("01:00").do(job,''It is 01:00'') while True: schedule.run_pending() time.sleep(60) # wait one minute

Tendrá que poner su propia función en lugar de trabajo y ejecutarla con nohup, por ejemplo:

nohup python2.7 MyScheduledProgram.py &

No olvides volver a iniciarlo si reinicias.


Puedes hacer eso así:

from datetime import datetime from threading import Timer x=datetime.today() y=x.replace(day=x.day+1, hour=1, minute=0, second=0, microsecond=0) delta_t=y-x secs=delta_t.seconds+1 def hello_world(): print "hello world" #... t = Timer(secs, hello_world) t.start()

Esto ejecutará una función (por ejemplo, hello_world) el día siguiente a la 1 a.m.