一、安装:
pip install apscheduler -i https://pypi.tuna.tsinghua.edu.cn/simple
二、APScheduler的使用:
三、APScheduler配置详解:
1、DateTrigger:日期触发器,主要是在某一日期时间点上运行任务时调用,是 APScheduler 里面最简单的一种触发器。通常也适用于一次性的任务或作业调度。
from apscheduler.schedulers.blocking import BlockingScheduler
def my_job():
print('Hello World!')
sched = BlockingScheduler()
# 采用date固定时间模式,在特定时间只执行一次
sched.add_job(my_job, 'date', run_date='2024-01-10 00:00:00')
sched.start()
2、IntervalTrigger:间隔触发器,在日期触发器基础上扩展了,比如时、分、秒、天、周这几个部分的设定。是我们用以对重复性任务进行设定或调度的一个常用调度器。设定了时间部分之后,从起始日期开始(默认是当前)会按照设定的时间去执行任务。
from apscheduler.schedulers.blocking import BlockingScheduler
def my_job():
print('Hello World!')
sched = BlockingScheduler()
# 采用interval固定间隔模式,在2024年1月10号9点-10点,每隔五秒只执行一次
sched.add_job(company_new_add, 'interval', seconds=5, start_date="2024-01-10 09:00:00",
end_date="2024-01-10 10:00:00", timezone="Asia/Shanghai")
sched.start()
interval触发器支持设置的参数:
参数 | 含义 |
weeks(int) | 每隔几周 |
days (int) | 间隔几天 |
hours (int) | 间隔几小时 |
minutes (int) | 间隔几分钟 |
seconds (int) | 间隔多少秒 |
start_date (datetime|str) | 开始日期 |
end_date (datetime|str) | 结束日期 |
3、CronTrigger:cron 表达式触发器。cron 表达式触发器就等价于我们 Linux 上的 crontab,它主要用于更复杂的日期时间进行设定。
from apscheduler.schedulers.blocking import BlockingScheduler
def everyday_job():
print('Hello World!')
sched = BlockingScheduler()
#每隔一天 执行一次程序
# sched.add_job(everyday_job, 'interval', days=1)
#每天早上十点半和十八点半各执行一次程序
sched.add_job(everyday_job, 'cron', hour='10, 18', minute='30')
sched.start()
cron触发器支持设置如下参数:
用表达式类型参数设置如下:
表达式 | 参数类型 | 描述 |
---|
* | 所有 | 通配符。例: minutes=* 即每分钟触发 |
*/a | 所有 | 可被a整除的通配符。 |
a-b | 所有 | 范围a-b触发 |
a-b/c | 所有 | 范围a-b,且可被c整除时触发 |
xth y | 日 | 第几个星期几触发。x为第几个,y为星期几 |
last x | 日 | 一个月中,最后个星期几触发 |
last | 日 | 一个月最后一天触发 |
x,y,z | 所有 | 组合表达式,可以组合确定值或上方的表达式 |
4、参数的传入:
传递参数的方式有元组(tuple)、列表(list)、字典(dict) *****注意:不过需要注意采用元组传递参数时后边需要多加一个逗号*****
import time
import datetime
from apscheduler.schedulers.blocking import BlockingScheduler
def job1(f):
print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())), f)
def job2(args1, args2, f):
print(type(args1))
print (f, args1, args2)
def job3(**args):
print (args)
#带有参数的示例
scheduler.add_job(job2, 'interval', seconds=5, args=['a','b'], id='test_job4')
scheduler.add_job(job2, 'interval', seconds=5, args=('a','b','c',), id='test_job5')
scheduler.add_job(job3, 'interval', seconds=5, kwargs={'a':1,'b':2}, id='test_job6')
# print scheduler.get_jobs()
scheduler.start()