用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)」许可协议进行许可。

posted @   上官飞鸿  阅读(5126)  评论(0编辑  收藏  举报
编辑推荐:
· 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框架的用法!
more_horiz
keyboard_arrow_up light_mode palette
选择主题
点击右上角即可分享
微信分享提示