美文网首页
python定时任务

python定时任务

作者: 小敢敢不憨a | 来源:发表于2021-09-13 15:46 被阅读0次

1、while循环中使用sleep

缺点:不容易控制,而且是个阻塞函数

2、schedule模块

优点:可以管理和调度多个任务,可以进行控制

缺点:阻塞式函数

3、Threading模块中的Timer

优点:非阻塞

缺点:不易管理多个任务

4、sched模块

sched模块实现了一个时间调度程序,该程序可以通过单线程执行来处理按照时间尺度进行调度的时间。

通过调用scheduler.enter(delay,priority,func,args)函数,可以将一个任务添加到任务队列里面,当指定的时间到了,就会执行任务(func函数)。

⭐delay:任务的间隔时间。

⭐priority:如果几个任务被调度到相同的时间执行,将按照priority的增序执行这几个任务。

⭐func:要执行的任务函数

⭐args:func的参数

执行结果为:

按顺序执行任务:

执行结果为:

s.run()会阻塞当前线程的执行

可以用

也可以用s.cancal(action)来取消sched中的某个action

5、定时框架APScheduler

APScheduler是python的一个定时任务框架,它提供了基于日期date、固定时间间隔interval、以及linux上的crontab类型的定时任务。该矿机不仅可以添加、删除定时任务,还可以将任务存储到数据库中、实现任务的持久化。

APScheduler有四种组件:

⭐triggers(触发器):触发器包含调度逻辑,每一个作业有它自己的触发器,用于决定接下来哪一个作业会运行,除了他们自己初始化配置外,触发器完全是无状态的。

⭐job stores(作业存储):用来存储被调度的作业,默认的作业存储器是简单地把作业任务保存在内存中,其它作业存储器可以将任务作业保存到各种数据库中,支持MongoDB、Redis、SQLAlchemy存储方式。当对作业任务进行持久化存储的时候,作业的数据将被序列化,重新读取作业时在反序列化。

⭐executors(执行器):执行器用来执行定时任务,只是将需要执行的任务放在新的线程或者线程池中运行。当作业任务完成时,执行器将会通知调度器。对于执行器,默认情况下选择ThreadPoolExecutor就可以了,但是如果涉及到一下特殊任务如比较消耗CPU的任务则可以选择ProcessPoolExecutor,当然根据根据实际需求可以同时使用两种执行器。

⭐schedulers(调度器):调度器是将其它部分联系在一起,一般在应用程序中只有一个调度器,应用开发者不会直接操作触发器、任务存储以及执行器,相反调度器提供了处理的接口。通过调度器完成任务的存储以及执行器的配置操作,如可以添加。修改、移除任务作业。

APScheduler提供了七种调度器:

⭐BlockingScheduler:适合于只在进程中运行单个任务的情况,通常在调度器是你唯一要运行的东西时使用。

⭐BackgroundScheduler: 适合于要求任何在程序后台运行的情况,当希望调度器在应用后台执行时使用。

⭐AsyncIOScheduler:适合于使用asyncio异步框架的情况

⭐GeventScheduler: 适合于使用gevent框架的情况

⭐TornadoScheduler: 适合于使用Tornado框架的应用

⭐TwistedScheduler: 适合使用Twisted框架的应用

⭐QtScheduler: 适合使用QT的情况

APScheduler提供了四种存储方式:

⭐MemoryJobStore

⭐sqlalchemy

⭐mongodb

⭐redis

APScheduler提供了三种任务触发器:

⭐data:固定日期触发器:任务只运行一次,运行完毕自动清除;若错过指定运行时间,任务不会被创建

⭐interval:时间间隔触发器

⭐cron:cron风格的任务触发

示例1、# 该示例代码生成了一个BlockingScheduler调度器,使用了默认的任务存储MemoryJobStore,以及默认的执行器ThreadPoolExecutor,并且最大线程数为10。

示例2、

示例3、

运行结果为:

示例4、

运行结果为:

参考:python实现定时任务 - 简书 (jianshu.com)

相关文章

网友评论

      本文标题:python定时任务

      本文链接:https://www.haomeiwen.com/subject/vyiobltx.html