Python如何实现函数每日重复执行500次?附schedule示例代码
你现有代码仅支持每日固定时间点执行1次任务,无法满足单日执行500次的需求,且使用了Python2版本的print语法,在Python3环境下会直接报错。以下是两种可直接运行的实现方案:
方案1:24小时均匀分散执行500次
单日总时长为86400秒,将500次执行均匀分配的话,单次任务间隔为86400 / 500 = 172.8秒(约2分53秒),通过每日计数重置逻辑即可实现每日稳定跑满500次,负载压力最平稳:
import schedule import time from datetime import date # 初始化执行状态 exec_count = 0 current_day = date.today() def job(): global exec_count # 替换为你的实际业务逻辑 print(f"任务执行中,今日已完成 {exec_count + 1}/500 次") exec_count += 1 def reset_daily_stat(): """每日零点重置当日执行计数""" global exec_count, current_day exec_count = 0 current_day = date.today() # 绑定定时规则 schedule.every().day.at("00:00").do(reset_daily_stat) schedule.every(172.8).seconds.do(job) if __name__ == "__main__": while True: schedule.run_pending() # 缩短休眠间隔避免漏执行,资源占用可忽略 time.sleep(1)
适用场景:对任务执行的具体时间点无严格要求,希望避免瞬时任务压力打满服务/触发接口限流的场景。
方案2:固定时段集中执行500次
如果你需要在指定的低峰时段(比如凌晨1点)一次性跑完当日所有500次任务,可以在定时触发的任务内加循环控制执行次数:
import schedule import time def batch_job(): total_exec = 500 for i in range(total_exec): # 替换为你的实际业务逻辑 print(f"批量任务执行中,已完成 {i+1}/{total_exec} 次") # 按需设置单次执行后的间隔,避免请求过快 time.sleep(0.2) # 绑定每日触发时间 schedule.every().day.at("01:00").do(batch_job) if __name__ == "__main__": while True: schedule.run_pending() time.sleep(60)
适用场景:需要在业务低峰期集中处理完当日所有任务的场景,注意根据业务承受能力调整循环内的等待时长,避免资源占用过高。
补充说明
- 如果单个任务执行耗时较长,建议将任务放到独立线程运行,避免阻塞schedule的主调度循环导致定时偏移。
- 如果需要保证程序异常重启后执行计数不丢失,可以将当日执行次数、日期标识写入本地文件或轻量缓存,程序启动时读取恢复状态即可。
内容的提问来源于stack exchange,提问作者Parsa soleymani
相关产品推荐
相关产品推荐

