tiempo real matrices graficos graficas graficar grafica coordenadas barras python time scheduler

real - matplotlib python



Python-Comience una funciĆ³n en el momento dado (5)

¿Cómo puedo ejecutar una función en Python , en un momento dado?

Por ejemplo:

run_it_at(func, ''2012-07-17 15:50:00'')

y ejecutará la función func en 2012-07-17 15:50:00.

Probé el sched.scheduler , pero no inició mi función.

import time as time_module scheduler = sched.scheduler(time_module.time, time_module.sleep) t = time_module.strptime(''2012-07-17 15:50:00'', ''%Y-%m-%d %H:%M:%S'') t = time_module.mktime(t) scheduler_e = scheduler.enterabs(t, 1, self.update, ())

¿Que puedo hacer?


Leer los documentos de http://docs.python.org/py3k/library/sched.html :

Pasando de eso tenemos que calcular un retraso (en segundos) ...

from datetime import datetime now = datetime.now()

Luego usa datetime.strptime para analizar ''2012-07-17 15:50:00'' (te dejaré la cadena de formato)

# I''m just creating a datetime in 3 hours... (you''d use output from above) from datetime import timedelta run_at = now + timedelta(hours=3) delay = (run_at - now).total_seconds()

A continuación, puede utilizar la delay para pasar a un threading.Timer Instancia de threading.Timer , por ejemplo:

threading.Timer(delay, self.update).start()


Eche un vistazo al Programador Avanzado de Python, APScheduler: http://packages.python.org/APScheduler/index.html

Tienen un ejemplo solo para este uso: http://packages.python.org/APScheduler/dateschedule.html

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''])


Me encontré con el mismo problema: no pude obtener eventos de tiempo absoluto registrados con sched.enterabs para ser reconocidos por sched.run . sched.enter funcionó para mí si sched.enter una delay , pero es difícil de usar porque quiero que los trabajos se ejecuten a horas específicas del día en husos horarios específicos.

En mi caso, encontré que el problema era que el timefunc predeterminado en el inicializador time.time no es time.time (como en el ejemplo ), sino que es time.monotonic . time.monotonic no tiene ningún sentido para los horarios "absolutos" ya que, desde los documentos , "El punto de referencia del valor devuelto no está definido, por lo que solo es válida la diferencia entre los resultados de las llamadas consecutivas".

La solución para mí fue inicializar el programador como

scheduler = sched.scheduler(time.time, time.sleep)

No está claro si su time_module.time es en realidad time.time o time.monotonic, pero funciona bien cuando lo inicializo correctamente.


dateSTR = datetime.datetime.now().strftime("%H:%M:%S" ) if dateSTR == ("20:32:10"): #do function print(dateSTR) else: # do something useful till this time time.sleep(1) pass

Solo estoy buscando un disparador de evento Hora del día / Fecha: siempre que la fecha "cadena" esté ligada a una cadena de "hora" actualizada, funciona como una función TOD simple. Puede extender la cadena a una fecha y hora.

ya sea una ordenación lexicográfica o una comparación de orden cronológico, siempre que la cuerda represente un punto en el tiempo, la cuerda también lo hará.

alguien amablemente ofreció este enlace:

Técnica de comparación de cuerdas utilizada por Python


Puede valer la pena instalar esta biblioteca: https://pypi.python.org/pypi/schedule , básicamente ayuda a hacer todo lo que acaba de describir. Aquí hay un ejemplo:

import schedule import time def job(): print("I''m working...") schedule.every(10).minutes.do(job) schedule.every().hour.do(job) schedule.every().day.at("10:30").do(job) schedule.every().monday.do(job) schedule.every().wednesday.at("13:15").do(job) while True: schedule.run_pending() time.sleep(1)