Python定时任务apscheduler WARNING: Run time of job “job (trigger: cron[hour=‘5‘], next run at

文章介绍了如何在定时任务中设置misfire_grace_time参数以确保任务的稳定执行,以及在Windows系统中关闭硬盘休眠和唤醒定时器功能,以避免任务跳过的情况发生。

查了很多文章,最后的出来的结论:

1.定时任务中加入misfire_grace_time=36000,这个参数是用来设置容错时间的,即超过这个时间,就不再运行,我设置的时间比较长,这样能保证代码能正常运行。

scheduler_performance.add_job(func=performance_data14, args=('运行成果',), trigger='cron',hour = "7,8,12,17",minute = "00",id = 'performance_data14',misfire_grace_time=36000)

2.关闭电脑硬盘休眠(以下展示window系统操作)

1.开始菜单——控制面板——电源选项。

2.选择电源计划——平衡——更改计划设置。

3.更改高级电源设置——平衡[活动]——睡眠。

4.允许使用唤醒定时器——设置:关闭。

5.关闭、取消Window7系统的自动休眠功能

详见:如何让电脑硬盘休眠(怎么让硬盘休眠) - 65路由网

这样操作后,暂时还没有再出现任务跳掉的情况

from apscheduler.schedulers.background import BackgroundScheduler from apscheduler.triggers.cron import CronTrigger import logging import atexit from mysql import bpdata_to_sql, pedata_to_sql from bp import update_blood_data from pe import update_pe_data # 配置日志 logging.basicConfig( level=logging.INFO, format='%(asctime)s %(levelname)s %(message)s', handlers=[logging.StreamHandler()] ) scheduler = None # 全局调度器变量 def scheduled_bpdata_update(): """ 定时任务:每月执行血压和体检数据的批量导入 """ print("开始执行每月数据导入任务...") # 1. 执行血压数据导入 print("正在导入血压数据...") bp_success = bpdata_to_sql() if bp_success: print("血压数据导入完成") logging.info("血压数据导入成功") else: print("血压数据导入失败") logging.error("血压数据导入失败") # 2. 执行体检数据导入 print("正在导入体检数据...") pe_success = pedata_to_sql() if pe_success: print("体检数据导入完成") logging.info("体检数据导入成功") else: print("体检数据导入失败") logging.error("体检数据导入失败") # 3. 汇总结果 if bp_success or pe_success: logging.info("部分或全部数据导入成功,开始刷新分析缓存...") try: update_blood_data() update_pe_data() logging.info("血压和体检数据已成功刷新") except Exception as e: logging.critical(f"刷新分析数据失败: {e}", exc_info=True) else: logging.warning("所有数据导入均失败,跳过分析刷新") def start_scheduler(): """ 启动后台调度器,每月6号9:00执行数据同步 """ global scheduler scheduler = BackgroundScheduler() scheduler.add_job( func=scheduled_bpdata_update, trigger=CronTrigger(day='9', hour='14', minute='10'), # 每月6号上午9点 id='monthly_data_import', name='每月血压与体检数据导入', replace_existing=True, misfire_grace_time=3600 # 错过1小时内可补发 ) logging.info("调度器已启动,等待执行每月任务") try: scheduler.start() except (KeyboardInterrupt, SystemExit): print("\n用户中断,调度器已关闭") pass except Exception as e: logging.critical(f"调度器启动失败: {e}") raise finally: atexit.register(lambda: shutdown_scheduler()) def shutdown_scheduler(): """ 关闭调度器(程序退出时调用) """ global scheduler if scheduler and scheduler.running: print("正在关闭调度器...") scheduler.shutdown() print("调度器已安全关闭") 我有一个这样的文件
最新发布
10-11
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值