用apscheduler处理调度任务,定时任务,重复任务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | import datetime from apscheduler.schedulers.blocking import BlockingScheduler from apscheduler.triggers.cron import CronTrigger from apscheduler.triggers.date import DateTrigger from apscheduler.triggers.interval import IntervalTrigger def aps_test(x): print (datetime.datetime.now().strftime( '%Y-%m-%d %H:%M:%S' ), x) scheduler = BlockingScheduler() scheduler.add_job(func = aps_test, args = ( '定时任务' ,), trigger = 'cron' , hour = 23 , minute = 36 ) scheduler.add_job(func = aps_test, args = ( '一次性任务' ,), next_run_time = datetime.datetime.now() + datetime.timedelta(seconds = 12 )) scheduler.add_job(func = aps_test, args = ( '循环任务' ,), trigger = 'interval' , seconds = 3 ) # 上面的写法无法pyinstaller到windows # 建议写: scheduler.add_job(func = aps_test, args = ( '定时任务' ,), trigger = CronTrigger(hour = 23 , minute = 37 )) scheduler.add_job(func = aps_test, args = ( '一次性任务' ,), trigger = DateTrigger(datetime.datetime.now() + datetime.timedelta(seconds = 12 ))) scheduler.add_job(func = aps_test, args = ( '循环任务' ,), trigger = IntervalTrigger(seconds = 3 )) scheduler.start() # 开始任务,上面的任务并行处理 # 两个有用的参数: # 每小时(上下浮动120秒区间内)运行`aps_test` scheduler.add_job(aps_test, 'interval' , hours = 1 , jitter = 120 ) # 丢失任务的执行与合并 # 有时,任务会由于一些问题没有被执行。错过执行时间后,调度器才打开了。这时,调度器会检查每个任务的misfire_grace_time参数int值,延迟上限,来确定是否还执行失败的任务(这个参数可以全局设定的或者是为每个任务单独设定)。此时,一个哑弹任务,就可能会被连续执行多次。 # 如果在规定的时间未能执行任务,那么在120秒内允许继续运行。如果不加这个参数,服务器忙的话,可能会错过任务的执行。 scheduler.add_job(aps_test, 'interval' , hours = 1 , misfire_grace_time = 120 ) # 但这就可能导致一个问题,有些未完成任务实际上并不需要被执行多次。coalescing合并参数就能把一个多次的未完成当作一次未完成的任务。 # 也就是说,coalescing为True能把多个排队执行的同样任务,变成一个,而不会触发异常事件。 # 这个是给高频任务用的,比如果说一分钟执行一次,甚至多个进程。我还没用到。 |
作者:上官飞鸿
出处:https://www.cnblogs.com/jackadam/p/7880730.html
版权:本作品采用「知识共享-署名-非商业性-禁止演绎(CC-BY-NC-ND)」许可协议进行许可。
【推荐】国内首个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满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!