Python schedule库调度时如何在周五配置中跳过列表最后一项
实现方案
完全不需要修改原有任务列表的存储结构,通过拆分调度逻辑、结合列表切片或循环判断的方式即可实现需求,两种可直接落地的写法如下:
写法1:拆分工作日的调度规则(推荐)
这种写法把周一到周四的全量调度、周五的特殊调度做逻辑隔离,减少重复代码的同时,后续调整规则也更方便:
import schedule import time # 原有列表保持不变 hours = ["00:00","06:00","08:30","09:30","10:30","12:30","14:30","16:00","18:00"] jobs = [job1,job2,job3,job4,job5,job6,job7,job8,job9] # 周一到周四:全量配置所有任务 normal_days = [ schedule.every().monday, schedule.every().tuesday, schedule.every().wednesday, schedule.every().thursday ] for time_str, job in zip(hours, jobs): for day_config in normal_days: day_config.at(time_str).do(job) # 周五:仅配置除最后一项外的所有任务 friday_config = schedule.every().friday # 列表切片[:-1]代表取除最后一个元素外的所有内容 for time_str, job in zip(hours[:-1], jobs[:-1]): friday_config.at(time_str).do(job) while True: schedule.run_pending() time.sleep(1)
写法2:在原有循环中加判断逻辑
如果不想改动原有循环的整体结构,可以通过enumerate拿到当前遍历的索引,仅在非最后一项时配置周五的规则:
for idx, (time_str, job) in enumerate(zip(hours, jobs)): schedule.every().monday.at(time_str).do(job) schedule.every().tuesday.at(time_str).do(job) schedule.every().wednesday.at(time_str).do(job) schedule.every().thursday.at(time_str).do(job) # 仅当不是最后一个任务时,才给周五添加对应调度规则 if idx < len(hours) - 1: schedule.every().friday.at(time_str).do(job)
注意事项
- 不要硬编码判断时间值(比如判断
time_str != "18:00"),使用索引切片/判断的方式更灵活:后续不管列表新增多少任务,只要需要周五跳过的项始终放在列表最后位置,逻辑不需要修改 - 建议提前校验
hours和jobs的长度一致性,避免zip循环时漏配任务
内容的提问来源于stack exchange,提问作者Andres Gonzalez
相关产品推荐
相关产品推荐

