本文采用APSchedual框架,设置cron类型(某个特定的时刻执行)定时任务,编码语言为python3,平台为PyCharm,系统为Windows10。
注意:
-
scheduler的主循环(main_loop),其实就是反复检查是不是有到点需要执行的任务。
-
BlockingSchedual:阻塞型,main_loop在当前进程的主线程内运行,所以调用start函数后会阻塞当前线程,即start后的语句无法执行。适合于只在进程中运行单个任务的情况。
-
BackgroundScheduler:非阻塞型,和BlockingScheduler基本一样,但其另外开了一个子线程,main_loop放在了这个子线程里,所以调用start函数后主线程不会阻塞,即其后语句照常执行。
-
以上两种定时任务都是线程级的,以至于我没法在定时任务中执行多进程操作,最后无奈改成了用while判断是否到达某个时间点hhhhh好鸡肋!
第一步:安装APSchedual包。
第二步:导入APSchedual,开始编码啦。
1. BlockingScheduler阻塞型
from apscheduler.schedulers.blocking import BlockingScheduler
# 将要被定时执行的任务
def task(s):
print(s)
if __name__ == '__main__':
# 初始化调度器
blocking_scheduler = BlockingScheduler()
# 添加任务作业,args()中最后一个参数后面要有一个逗号,本任务设置在每天凌晨1:00:00执行
scheduler.add_job(task, 'cron', hour='1', minute='0', second='0', args=("hello",))
# 启动调度器,到点task就会被执行啦
scheduler.start()
print("world") # 此处world将不会被打印出来,因为被阻塞了
2. BackgroundScheduler非阻塞型
from apscheduler.schedulers.background import BackgroundScheduler
# 将要被定时执行的任务
def task(s):
print(s)
if __name__ == '__main__':
# 初始化调度器
background_scheduler = BackgroundScheduler()
# 添加任务作业,args()中最后一个参数后面要有一个逗号,本任务设置在每天凌晨1:00:00执行
scheduler.add_job(task, 'cron', hour='1', minute='0', second='0', args=("hello",))
# 启动调度器,到点task就会被执行啦
scheduler.start()
print("world") # 此处world会被打印出来