Python herramienta de programación de tareas: APScheduler reimpresión: https: //mp.weixin.qq.com/s/SWRKL1Ly1NtLFsScpW4anw

escenarios de planificación de tareas

Los llamados medios de programación de tareas programar el plan de ejecución de la tarea que cuando se implementa, la forma de ejecución. A menudo figuran en proyectos reales; en proyectos de datos particulares, tales como estadísticas en tiempo real las visitas al sitio cada 5 minutos, es necesario analizar cada 5 minutos cronometrados tráfico de datos de registro.

Resumen Los siguientes escenarios de programación de tareas:

  • Desconectado planificación de tareas: un tiempo de ejecución de la tarea granularidad
  • actualización de caché compartida: la hora de actualizar la caché, tales como Redis caché; compartir datos entre diferentes procesos

herramienta de programación de tareas

  • crontab de Linux, compatible con la hora / día / mes / tamaño minuto / semana, realizar tareas de conformidad con
  • Cuarzo de java
  • Programador de tareas de Windows

Este artículo está sobre el pitón en la biblioteca de programación de tareas, APScheduler (avance pitón programador). Si sabes de cuarzo, se puede ver que se logrará la pitón cuarzo APScheduler; APScheduler proporciona tiempo, un punto fijo en el tiempo y la tarea llama al programa crontab basado en la forma, que puede ser utilizado como una herramienta de programación multiplataforma para su uso.

APScheduler

Introducción a los componentes

APScheduler consta de cinco partes: el gatillo, un planificador, una tarea de memoria, y unos acontecimientos ejecutor de tareas.

  • Grupo de trabajo: tareas de identificación y ejecución de la tarea func
  • disparadores de activación: determinar cuándo iniciar la ejecución de la tarea
  • Tarea tiendas de trabajo de memoria: guardar el estado de la tarea
  • ejecutores de actuador: cómo determinar la ejecución de la tarea
  • Tarea de sucesos del suceso: supervisión anomalías de ejecución de tareas
  • Los programadores planificador: todo el ciclo de vida de una serie de tareas de editar, añadir 任务a 任务存储器, en 任务el momento del tiempo de ejecución de la llegada, para 任务dar 执行器cumplimiento a los resultados de retorno; también emitió un monitor de eventos, el monitor 任务事件 .

instalar

pip install apscheduler

Un ejemplo sencillo

from apscheduler.schedulers.background import BackgroundSchedulerfrom apscheduler.executors.pool import ThreadPoolExecutor, ProcessPoolExecutorfrom apscheduler.jobstores.sqlalchemy import SQLAlchemyJobStorefrom apscheduler.events import EVENT_JOB_EXECUTED, EVENT_JOB_ERRORimport loggingimport datetime
# 任务执行函数def job_func(job_id): print('job %s is runed at %s' % (job_id, datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')))
# 事件监听def job_exception_listener(event): if event.exception: # todo:异常处理, 告警等 print('The job crashed :(') else: print('The job worked :)')
# 日志logging.basicConfig()logging.getLogger('apscheduler').setLevel(logging.DEBUG)
# 定义一个后台任务非阻塞调度器scheduler = BackgroundScheduler()# 添加一个任务到内存中 # 触发器:trigger='interval' seconds=10 每10s触发执行一次# 执行器:executor='default' 线程执行# 任务存储器:jobstore='default' 默认内存存储# 最大并发数:max_instancesscheduler.add_job(job_func, trigger='interval', args=[1], id='1', name='a test job', max_instances=10, jobstore='default', executor='default', seconds=10)# 设置任务监听scheduler.add_listener(job_exception_listener, EVENT_JOB_EXECUTED | EVENT_JOB_ERROR)
# 启动调度器scheduler.start()

operación:

job 1 is runed at 2020-03-21 20:00:38The job worked :)job 1 is runed at 2020-03-21 20:00:48The job worked :)job 1 is runed at 2020-03-21 20:00:58The job worked :)

gatillo

Gatillo decidir cuándo realizar la tarea, APScheduler soporta tres tipos de disparadores

  • gatillo = 'intervalo': la realización de un período fijo de tiempo, semanas de apoyo, día, hora, minuto, segundo, el tiempo especificado pueden variar
    sched.add_job(job_function, 'interval', hours=2, start_date='2010-10-10 09:30:00', end_date='2014-06-15 11:00:00')
  • gatillo = 'fecha': tiempo fijo, lleve a cabo una
    sched.add_job(my_job, 'date', run_date=datetime(2009, 11, 6, 16, 30, 5), args=['text'])
  • gatillo = 'cron': el apoyo manera crontab, la misión
    • Parámetros: hora / día / mes / tamaño de partícula minutos / semana también se puede especificar plazo
      year (int|str) – 4-digit yearmonth (int|str) – month (1-12)day (int|str) – day of the (1-31)week (int|str) – ISO week (1-53)day_of_week (int|str) – number or name of weekday (0-6 or mon,tue,wed,thu,fri,sat,sun)hour (int|str) – hour (0-23)minute (int|str) – minute (0-59)second (int|str) – second (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)
    • ejemplo
         # 星期一到星期五,5点30执行任务job_function,直到2014-05-30 00:00:00   sched.add_job(job_function, 'cron', day_of_week='mon-fri', hour=5, minute=30, end_date='2014-05-30')
      # 按照crontab格式执行, 格式为:分钟 小时 天 月 周,*表示所有 # 5月到8月的1号到15号,0点0分执行任务job_function sched.add_job(job_function, CronTrigger.from_crontab('0 0 1-15 may-aug *'))

actuador

Actuador decidir cómo realizar tareas; APScheduler soporta cuatro actuadores diferentes, piscina de uso común (hilo / proceso) y GEvent (io multiplexor que soporta alta de concurrencia), el grupo de subprocesos por defecto a la piscina, diferentes actuadores pueden configuración (scheduler See) en la configuración del planificador

  • apscheduler.executors.asyncio: io sincrónica, obstrucción
  • apscheduler.executors.gevent: io multiplexados, no bloqueante
  • apscheduler.executors.pool: hilos ThreadPoolExecutor y procesos ProcessPoolExecutor
  • apscheduler.executors.twisted: orientada a eventos

la memoria de tareas

Decide que el mandato de la memoria de trabajo el modo de ahorro, el valor predeterminado se almacena en la memoria (MemoryJobStore), reinicio después no. APScheduler tareas de soporte de memoria son:

  • apscheduler.jobstores.memory: 内存
  • apscheduler.jobstores.mongodb: almacenado en mongodb
  • apscheduler.jobstores.redis: almacenado en Redis
  • apscheduler.jobstores.rethinkdb: almacenado en rethinkdb
  • bases de datos SQLAlchemy de apoyo tales como MySQL, sqlite, etc.: apscheduler.jobstores.sqlalchemy
  • apscheduler.jobstores.zookeeper: Zookeeper

Las diferentes tareas se pueden configurar en el programador de la memoria de configuración (vea Programador)

Programador

APScheduler apoyado programador sigue, que es más comúnmente utilizado y BackgroundScheduler BlockingScheduler

  • BlockingScheduler: adecuado para el planificador de procesos es el proceso sólo correr, llamar a los bloques de función de inicio del hilo actual pueden no respondieron de inmediato.
  • BackgroundScheduler: adecuado para aplicaciones de programación que se ejecuta en segundo plano y no bloquea la llamada emperador comienzo de la rosca.
  • AsyncIOScheduler: adecuado para aplicaciones que utilizan asyncio módulo.
  • GeventScheduler: adecuado para las aplicaciones que utilizan el módulo GEvent.
  • TwistedScheduler: Twisted adecuado para la creación de aplicaciones.
  • QtScheduler: adecuado para la creación de aplicaciones Qt.

A partir del ejemplo anterior, podemos ver, el programador de tareas puede operar (y especifica el gatillo, y la tarea de memoria ejecutor de tareas) y las tareas de supervisión.

scheduler.add_job(job_func, trigger='interval', args=[1], id='1', name='a test job', max_instances=10, jobstore='default', executor='default', seconds=10)

Echemos un vistazo a cada parte en detalle

  • El planificador de configuración: add_job vemos JobStore y ejecutor son los predeterminados, APScheduler puede asignar diferentes tareas se almacenan en la definición e implementación de la agenda, y los parámetros iniciales

    from pytz import utc
    from apscheduler.schedulers.background import BackgroundSchedulerfrom apscheduler.jobstores.mongodb import MongoDBJobStorefrom apscheduler.jobstores.sqlalchemy import SQLAlchemyJobStorefrom apscheduler.executors.pool import ThreadPoolExecutor, ProcessPoolExecutor
    # 通过dict方式执行不同的jobstores、executors和默认的参数jobstores = { 'mongo': MongoDBJobStore(), 'default': SQLAlchemyJobStore(url='sqlite:///jobs.sqlite')}executors = { 'default': ThreadPoolExecutor(20), 'processpool': ProcessPoolExecutor(5)}job_defaults = { 'coalesce': False, 'max_instances': 3}# 定义调度器scheduler = BackgroundScheduler(jobstores=jobstores, executors=executors, job_defaults=job_defaults, timezone=utc)
    def job_func(job_id): print('job %s is runed at %s' % (job_id, datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')))# 添加任务scheduler.add_job(job_func, trigger='interval', args=[1], id='1', name='a test job', jobstore='default', executor='processpool', seconds=10)# 启动调度器scheduler.start()
  • tareas operativas: programador puede añadir, eliminar, pausar, reanudar y modificar tareas. Cabe señalar aquí que la tarea de operar sólo en las obras de tareas pendientes de ejecución se han aplicado y no se ven afectados por la ejecución de estas operaciones.

    • add_job
      scheduler.add_job(job_func, trigger='interval', args=[1], id='1', name='a test job', max_instances=10, jobstore='default', executor='default', seconds=10)
    • remove_job: La única vez a través de la identificación de tareas, elimine se suprime la tarea correspondiente en la memoria
      scheduler.add_job(myfunc, 'interval', minutes=2, id='my_job_id')scheduler.remove_job('my_job_id')
    • Detener y reanudar trabajos: pausa y reiniciar la tarea
      scheduler.add_job(myfunc, 'interval', minutes=2, id='my_job_id')scheduler.pause_job('my_job_id')scheduler.resume_job('my_job_id')
    • Modificar los trabajos de: Modificar la configuración de la tarea
      job = scheduler.add_job(myfunc, 'interval', minutes=2, id='my_job_id', max_instances=10)# 修改任务的属性job.modify(max_instances=6, name='Alternate name')# 修改任务的触发器scheduler.reschedule_job('my_job_id', trigger='cron', minute='*/5')
  • Misión de tipo de evento, tipos de uso común son:

    • EVENT_JOB_ERROR: indica que la tarea se activa en caso de proceso de ejecución anormal

    • EVENT_JOB_EXECUTED: éxito la ejecución de tareas

    • EVENT_JOB_MAX_INSTANCES: parámetro de ejecución de la tarea supera un planificador configurado en

      scheduler.add_listener(job_exception_listener, EVENT_JOB_EXECUTED | EVENT_JOB_ERROR)

Documento de referencia: https: //apscheduler.readthedocs.io/en/stable/userguide.html

Supongo que te gusta

Origin www.cnblogs.com/testzcy/p/12610334.html
Recomendado
Clasificación