Python中定时任务(计划任务)最常用的解决方案就是
APScheduler
APScheduler
全称
Advanced Python Scheduler
作用为在指定的时间规则执行指定的作业
pip install apscheduler
BlockingScheduler
阻塞式调度器
BackgroundScheduler
后台调度器(非阻塞)
添加计划任务
scheduler.add_job(func, trigger=None, args=None, kwargs=None, .... , **trigger_args)
trigger
: 触发器(可选):date, interval, cron
args
: 用于调用func的位置参数列表
更多参考:add_job
1. date触发器
在某个日期时间只触发一次事件。示例代码如下:
from datetime import date
from apscheduler.schedulers.blocking import BlockingScheduler
sched = BlockingScheduler()
def task(text):
print(text)
sched.add_job(task,'date',run_date=date(2022,2,2),args=['附加参数'])
sched.start()
更多参考:date
2. interval触发器
想要在固定的时间间隔触发事件。interval
的触发器可以设置以下的触发参数:
weeks:周。整形。
days:一个月中的第几天。整形。
hours:小时。整形。
minutes:分钟。整形。
seconds:秒。整形。
start_date:间隔触发的起始时间。
end_date:间隔触发的结束时间。
jitter:触发的时间误差。
更多参考:interval
3. cron触发器(常用)
在某个确切的时间周期性的触发事件。可以使用的参数如下:
year
:4位数字的年份
month
:1-12 月份
day
:1-31 日
week
:1-53 周
day_of_week
: 0-6 或 'mon'、'tue'、'wed'、'thu'、'fri、'sat'、'sun'
hour
: 0-23 小时
minute
: 0-59 分钟
second
: 0-59 秒
start_date
: datetime类型 或者 字符串类型,起始时间。
end_date
: datetime类型 或者 字符串类型,结束时间。
timezone
:时区。
jitter
:任务触发的误差时间。
示例如下:
def task():
scheduler = BlockingScheduler()
scheduler.add_job(tick,"cron",day="4th sun",hour=20,minute=1)
也可以用表达式类型:
表达式 | 可用字段 | 描述 |
---|
* | 任何 | 在每个值都触发 |
*/a | 任何 | 每隔a触发一次 |
a-b | 任何 | 在a-b区间内任何一个时间触发(a<b) |
a-b/c | 任何 | 在a-b区间内每隔c触发一次 |
xth y | day | 第x个星期y触发 |
last x | day | 最后一个星期x触发 |
x,y,z | 任何 | 可以把上面的表达式进行组合 |
更多参考:cron