定时任务 apscheduler 简单使用
User guide — APScheduler 3.10.4.post2 documentation
安装
pip install apscheduler
BlockingScheduler 基本使用
from datetime import datetime
from apscheduler.schedulers.blocking import BlockingScheduler
from apscheduler.triggers.cron import CronTrigger
# A scheduler that runs in the foreground
scheduler = BlockingScheduler()
def print_now():
# 打印当前时间
print(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
# 立即执行一次
scheduler.add_job(print_now, 'date', run_date=datetime.now())
# 每60秒执行一次
scheduler.add_job(print_now, 'interval', seconds=3)
# 使用 corn 表达式, 周一到周六的每天早上 9 点到下午 18 点之间,每隔 1 分钟执行一次
# sched.add_job(print_now, CronTrigger.from_crontab('*/1 9-17 * * 1-6'))
if __name__ == '__main__':
print("定时任务 ~ 启动! ")
scheduler.start()
print("定时任务 ~ 结束!") # 使用 BlockingScheduler 时, 这里将不会被执行, 定时任务会阻塞主线程
输出结果
定时任务 ~ 启动!
2024-10-09 23:38:58
2024-10-09 23:39:01
2024-10-09 23:39:04
2024-10-09 23:39:07
2024-10-09 23:39:10
2024-10-09 23:39:13
BackgroundScheduler 的使用
import time
from datetime import datetime
from apscheduler.schedulers.background import BackgroundScheduler
scheduler = BackgroundScheduler()
# 使用注解的形式标记函数为定时任务, 或者使用 sched.add_job 方法, 等同效果
@scheduler.scheduled_job('interval', seconds=3)
def print_now():
# 打印当前时间
print(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
if __name__ == '__main__':
print("定时任务 ~ 启动! ")
scheduler.start() # 使用 BackgroundScheduler 时, 定时任务不会阻塞主线程
print("定时任务 ~ 结束!")
# 定时任务随着主线程的结束而结束, 所以这里需要一个死循环来阻止主线程结束, 才能看到定时器的效果
while True:
time.sleep(1)
pass
输出结果
定时任务 ~ 启动!
定时任务 ~ 结束!
2024-10-09 23:47:24
2024-10-09 23:47:27
2024-10-09 23:47:30
2024-10-09 23:47:33
2024-10-09 23:47:36
2024-10-09 23:47:39