APScheduler
Explicación detallada del módulo de temporización de Python : (es necesario instalarlo primero)
pip3 install apscheduler
- APScheduler se basa en un marco de tareas de sincronización de Python de Quartz, que implementa todas las funciones de Quartz y es muy conveniente de usar. Proporciona tareas basadas en fechas, intervalos de tiempo fijos y tipos de crontab , y puede conservar las tareas. Basándonos en estas funciones, podemos implementar fácilmente un sistema de tareas de sincronización de Python.
- Los cuatro componentes de APScheduler:
- ** Activador ** contiene lógica de programación. Cada trabajo tiene su propio activador para determinar qué trabajo se ejecutará a continuación. A excepción de sus propios accidentes de configuración inicial, los desencadenantes son completamente apátridas.
- ** Almacén de trabajos ** almacena trabajos programados. El almacén de trabajos predeterminado simplemente guarda el trabajo en la memoria, y otros almacenes de trabajos guardan el trabajo en la base de datos. Los datos de un trabajo se serializan cuando se guardan en el almacenamiento de trabajos persistentes y se deserializan cuando se cargan. El planificador no puede compartir el mismo almacenamiento de trabajos.
- El ** ejecutor ** maneja la ejecución del trabajo, y generalmente lo hace enviando el objeto invocable especificado a un hilo o ingresando la ciudad en el trabajo. Cuando se completa el trabajo, el ejecutor notificará al programador.
- ** Scheduler ** es el otro componente. Por lo general, solo tiene un programador en su aplicación y el desarrollador de la aplicación generalmente no se ocupa directamente del almacenamiento de trabajos, los programadores y los activadores, por el contrario, el programador proporciona una interfaz adecuada para manejarlos. La configuración del almacenamiento de trabajos y los ejecutores se puede realizar en el programador, como agregar, modificar y eliminar trabajos.
-
Aplicación sencilla:
import time from apscheduler.schedulers.blocking import BlockingScheduler def my_job(): print time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())) sched = BlockingScheduler() sched.add_job(my_job, 'interval', seconds=5) sched.start()
El ejemplo anterior significa que la función my_job se ejecuta cada 5 segundos y se emite la información de la hora actual
-
Trabajo operativo
-
Agregar tarea
Lo anterior es agregar un trabajo a través de add_job (), y otra forma es modificar la función a través del modificador schedule_job ()
import time from apscheduler.schedulers.blocking import BlockingScheduler sched = BlockingScheduler() @sched.scheduled_job('interval', seconds = 5) def my_job(): print time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())) sched.start()
-
Quitar trabajo
job = scheduler.add_job(myfunc, 'intercal', minutes = 2) job.remove() #如果有多个任务序列的话可以给每个任务设置ID号,可以根据ID号选择清除对象,且remove放到start前才会有效 sched.add_job(myfunc, 'interval', minutes = 2, id = 'my_job_id') sched.remove_job('my_job_id')
-
Pausar y reanudar operaciones
-
Pausar el trabajo:
apsched.job.Job.pause() apsched.schedulers.base.BaseScheduler.pause_job()
-
Trabajo de recuperación:
apsched.job.Job.resume() apsched.schedulers.base.BaseScheduler.resume_job()
-
-
Obtener lista de trabajos
Obtenga una lista de trabajos programados, que se puede utilizar
get_jobs()
para completar, y devolverá todas las instancias de trabajo. O utiliceprint_jobs()
para generar una lista de todos los trabajos formateados. También puede usar get_job (ID de tarea) para obtener la lista de trabajos de la tarea especificadajob = sched.add_job(my_job, 'interval', seconds=2 ,id='123') print sched.get_job(job_id='123') print sched.get_jobs()
-
Cerrar programador
De forma predeterminada, el programador esperará a que se completen todos los trabajos en ejecución y cerrará todos los programadores y el almacenamiento de trabajos. Si no quiere esperar, puede establecer la opción de espera en False.
sched.shutdown() sched.shutdown(wait=False)
-
-
Control de la operación del trabajo (disparador)
El segundo parámetro de add_job es el disparador, que administra cómo se programa el trabajo. Puede ser fecha, intervalo o cron. Para diferentes disparadores, los parámetros correspondientes también son los mismos.
-
programación de cronometraje (ejecutado en un momento determinado)
(int|str) 表示参数既可以是int类型,也可以是str类型 (datetime | str) 表示参数既可以是datetime类型,也可以是str类型 year (int|str) – 4-digit year -(表示四位数的年份,如2008年) month (int|str) – month (1-12) -(表示取值范围为1-12月) day (int|str) – day of the (1-31) -(表示取值范围为1-31日) week (int|str) – ISO week (1-53) -(格里历2006年12月31日可以写成2006年-W52-7(扩展形式)或2006W527(紧凑形式)) day_of_week (int|str) – number or name of weekday (0-6 or mon,tue,wed,thu,fri,sat,sun) - (表示一周中的第几天,既可以用0-6表示也可以用其英语缩写表示) hour (int|str) – hour (0-23) - (表示取值范围为0-23时) minute (int|str) – minute (0-59) - (表示取值范围为0-59分) second (int|str) – second (0-59) - (表示取值范围为0-59秒) start_date (datetime|str) – earliest possible date/time to trigger on (inclusive) - (表示开始时间) end_date (datetime|str) – latest possible date/time to trigger on (inclusive) - (表示结束时间) timezone (datetime.tzinfo|str) – time zone to use for the date/time calculations (defaults to scheduler timezone) -(表示时区取值) ####例子: #表示2017年3月22日17时19分07秒执行该程序 sched.add_job(my_job, 'cron', year=2017,month = 03,day = 22,hour = 17,minute = 19,second = 07) #表示任务在6,7,8,11,12月份的第三个星期五的00:00,01:00,02:00,03:00 执行该程序 sched.add_job(my_job, 'cron', month='6-8,11-12', day='3rd fri', hour='0-3') #表示从星期一到星期五5:30(AM)直到2014-05-30 00:00:00 sched.add_job(my_job(), 'cron', day_of_week='mon-fri', hour=5, minute=30,end_date='2014-05-30') #表示每5秒执行该程序一次,相当于interval 间隔调度中seconds = 5 sched.add_job(my_job, 'cron',second = '*/5')
-
Programación de intervalos de intervalo (con qué frecuencia ejecutar)
weeks (int) – number of weeks to wait days (int) – number of days to wait hours (int) – number of hours to wait minutes (int) – number of minutes to wait seconds (int) – number of seconds to wait start_date (datetime|str) – starting point for the interval calculation end_date (datetime|str) – latest possible date/time to trigger on timezone (datetime.tzinfo|str) – time zone to use for the date/time calculations ###例子 #表示每隔3天17时19分07秒执行一次任务 sched.add_job(my_job, 'interval',days = 3,hours = 17,minutes = 19,seconds = 7)
-
Fecha de programación programada (el trabajo solo se ejecutará una vez)
run_date (datetime|str) – the date/time to run the job at -(任务开始的时间) timezone (datetime.tzinfo|str) – time zone for run_date if it doesn’t have one already ###例子 # The job will be executed on November 6th, 2009 sched.add_job(my_job, 'date', run_date=date(2009, 11, 6), args=['text']) # The job will be executed on November 6th, 2009 at 16:30:05 sched.add_job(my_job, 'date', run_date=datetime(2009, 11, 6, 16, 30, 5), args=['text'])
-