1.调度器BlockingScheduler用法
BlockingScheduler: 调用start函数后会阻塞当前线程。当调度器是你应用中唯一要运行的东西时使用
import time
from datetime import datetime
from apscheduler.schedulers.blocking import BlockingScheduler # 导入模块
# 创建一个需要被执行的函数
def func():
print(datetime.now())
lock = BlockingScheduler() # 创建对象
block.add_job(func, 'interval', seconds=3)
if __name__ == "__main__":
block.start()
while True:
print('1')
time.sleep(1)
运行结果如下:
2022-06-05 00:43:35.634221
2022-06-05 00:43:38.633397
2022-06-05 00:43:41.633384
2022-06-05 00:43:44.633015
2022-06-05 00:43:47.632748
2022-06-05 00:43:50.632968
2.调度器BackgroundScheduler用法
BackgroundScheduler: 调用start后主线程不会阻塞。当你不运行任何其他框架时使用,并希望调度器在你应用的后台执行。
此时定时任务会随着主进程结束而结束。
import time
from datetime import datetime
from apscheduler.schedulers.background import BackgroundScheduler # 导入模块
# 创建一个需要被执行的函数
def func():
print(datetime.now())
block = BackgroundScheduler() # 创建对象
block.add_job(func, 'interval', seconds=3)
if __name__ == "__main__":
block.start()
while True:
print('主进程')
time.sleep(1)
运行结果如下:
主进程
主进程
主进程
2022-06-10 00:20:15.600601
主进程
主进程
主进程
2022-06-10 00:20:18.601607
主进程
主进程
3.分步解析
#(1)导入模块
from apscheduler.schedulers.blocking import BlockingScheduler
from datetime import datetime
#(2)新建一个任务
def tick():
print(f'当前时间: {datetime.now()}')
#(3)创建对象
scheduler = BlockingScheduler()
#(4)创建定时任务
add_job添加了一个作业调度任务tick,触发器为 interval,每隔 3秒执行一次
可以使用start_date和end_date来限制计划运行的总时间
参数:
weeks( int ) – 等待的周数
days ( int ) – 等待的天数
hours ( int ) – 等待的小时数
minutes( int ) – 等待的分钟数
seconds ( int ) – 等待的秒数
start_date (datetime|str ) – 间隔计算的起点
end_date ( datetime|str ) – 可能触发的最新日期/时间
timezone ( datetime.tzinfo|str ) – 用于日期/时间计算的时区
jitter ( int|None ) –最多延迟jitter几秒钟的作业执行
scheduler.add_job(tick, 'interval', seconds=3)
#触发器为cron按固定的时间间隔触发,每天13时19分执行一次
scheduler.add_job(tick, 'cron', hour=13, minute=9)
#触发器为date 按特定时间点触发,2019年12月13日13时33分0秒
scheduler.add_job(tick, 'date', run_date=datetime(2019, 12, 13, 13, 32, 0))
#(5).执行
scheduler.start()
4.其他
调度器,调度程序快速指南:
BlockingScheduler:当调度程序是您的进程中唯一运行的东西时使用
BackgroundScheduler:当您不使用以下任何框架并希望调度程序在应用程序的后台运行时使用 AsyncIOScheduler:如果您的应用程序使用 asyncio 模块,请使用
GeventScheduler: 如果您的应用程序使用 gevent,请使用
TornadoScheduler:如果您正在构建 Tornado 应用程序,请使用
TwistedScheduler:如果您正在构建 Twisted 应用程序,请使用
QtScheduler:如果您正在构建 Qt 应用程序,请使用
触发器:
date:当你想在某个时间点只运行一次作业时使用
interval:当您想以固定的时间间隔运行作业时使用
cron:当您想在一天中的特定时间定期运行作业时使用
add_job方法参数解释:
add_job(func, trigger=None, args=None, kwargs=None, id=None, \
name=None, misfire_grace_time=undefined, coalesce=undefined, \
max_instances=undefined, next_run_time=undefined, \
jobstore='default', executor='default', \
replace_existing=False, **trigger_args)
func:可调用(或对func的文本引用)在给定时间运行
trigger:触发器
args:用于调用func的位置参数列表
kwargs:用于调用func的关键字参数字典
max_instances:允许同时运行的最大实例数,
借鉴:官方文档:https://apscheduler.readthedocs.io/en/latest/userguide.html#installing-apscheduler
借鉴:http://www.chenxm.cc/article/829.html
借鉴:https://blog.csdn.net/somezz/article/details/83104368