APScheduler
一.apscheduler简介
Advanced Python Scheduler(APScheduler)是一个Python库,可让您安排Python代码稍后执行,一次或定期执行。您可以根据需要随时添加或删除旧作业。如果将作业存储在数据库中,它们还将在调度程序重新启动并保持其状态的过程中幸免。重新启动调度程序后,它将运行它在脱机时应已运行的所有任务。
除其他事项外,APScheduler可用作跨平台的,特定于应用程序的替代程序,以替换平台特定的计划程序,例如cron守护程序或Windows任务计划程序。但是请注意,APScheduler本身不是守护程序或服务,也不是任何命令行工具附带的。它主要是要在现有应用程序中运行。也就是说,APScheduler确实为您提供了一些构建块,以构建调度程序服务或运行专用的调度程序进程。
二.组成介绍
APScheduler有四个组件:触发器(trigger),作业存储(job store),执行器(executor),调度器(scheduler)
触发器(trigger):
包含调度逻辑,每一个作业有它自己的触发器,用于决定接下来哪一个作业会运行。除了他们自己初始配置以外,触发器完全是无状态的,APScheduler 有三种内建的 trigger:
date: 特定的时间点触发
interval: 固定时间间隔触发
cron: 在特定时间周期性地触发
作业存储(job store):
存储被调度的作业,默认的作业存储是简单地把作业保存在内存中,其他的作业存储是将作业保存在数据库中。一个作业的数据将在保存在持久化作业存储时被序列化,并在加载时被反序列化。调度器不能分享同一个作业存储。
APScheduler 默认使用 MemoryJobStore,可以修改使用 DB 存储方案.
执行器(executor):
处理作业的运行,他们通常通过在作业中提交制定的可调用对象到一个线程或者进城池来进行。当作业完成时,执行器将会通知调度器。
最常用的 executor 有两种:
ProcessPoolExecutor
ThreadPoolExecutor
调度器(scheduler):
通常在应用中只有一个调度器,应用的开发者通常不会直接处理作业存储、调度器和触发器,相反,调度器提供了处理这些的合适的接口。配置作业存储和执行器可以在调度器中完成,例如添加、修改和移除作业。
三.举例介绍
固定时间间隔例子:
1 2 3 4 5 6 7 8 9 | from apscheduler.schedulers.blocking import BlockingScheduler from datetime import datetime def job(): print (datetime.now().strftime( "%Y-%m-%d %H:%M:%S" )) # 定义BlockingScheduler sched = BlockingScheduler() sched.add_job(job, 'interval' , seconds = 5 ) # 固定时间间隔 sched.start() |
1 | 结果: |
2019-12-06 09:45:16
2019-12-06 09:45:21
2019-12-06 09:45:26
*如果最后的项目要通过pyinstaller进行打包,上边的代码可能会出现报错,可能是版本的问题,只要将代码改成下边格式即可:
1 2 3 4 5 6 7 8 9 10 11 12 | from apscheduler.schedulers.blocking import BlockingScheduler from apscheduler.triggers.interval import IntervalTrigger from datetime import datetime def job(): print (datetime.now().strftime( "%Y-%m-%d %H:%M:%S" )) # 定义BlockingScheduler sched = BlockingScheduler() interval = IntervalTrigger(seconds = 5 ) sched.add_job(job, interval) # 固定时间间隔 sched.start() |
特定时间触发例子:
1 2 3 4 5 6 7 8 9 10 | from datetime import date from apscheduler.schedulers.blocking import BlockingScheduler sched = BlockingScheduler() def my_job(text): print (text) sched.add_job(my_job, 'date' , run_date = date( 2019 , 12 , 6 ), args = [ 'text' ]) # 函数将会在2019年12月6日零时零点零分执行一次 sched.start() |
在特定时间周期触发例子:
cron参数
- year (int|str) – 4-digit year
- month (int|str) – month (1-12)
- day (int|str) – day of the (1-31)
- week (int|str) – ISO week (1-53)
- day_of_week (int|str) – number or name of weekday (0-6 or mon,tue,wed,thu,fri,sat,sun)
- hour (int|str) – hour (0-23)
- minute (int|str) – minute (0-59)
- second (int|str) – second (0-59)
- start_date (datetime|str) – earliest possible date/time to trigger on (inclusive)
- end_date (datetime|str) – latest possible date/time to trigger on (inclusive)
- timezone (datetime.tzinfo|str) – time zone to use for the date/time calculations (defaults to scheduler timezone)
1 2 3 4 5 6 7 8 9 | from apscheduler.schedulers.blocking import BlockingScheduler def job_function(): print ( "Hello World" ) sched = BlockingScheduler() # 函数会在周一到周五的5:30执行,直到2014年5月30号结束 sched.add_job(job_function, 'cron' , day_of_week = 'mon-fri' , hour = 5 , minute = 30 , end_date = '2014-05-30' ) sched.start() |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!