Python 脚本在工作日(周一到周五)的 8:00 到 19:00 之间持续运行,并在其他时间暂停(延时)
Python 脚本在工作日(周一到周五)的 8:00 到 19:00 之间持续运行,并在其他时间暂停(延时)
- 💎 脚本实现:
- 📌 功能说明:
- ✅ 优点:
- ⚠️ 注意事项:
- 🔁 更精细的睡眠策略(可选优化)
要让一个 Python 脚本在工作日(周一到周五)的 8:00 到 19:00 之间持续运行,并在其他时间暂停(延时),你可以使用 time 和 datetime 模块来判断当前时间是否在目标时间段内。如果不在,可以让脚本休眠一段时间,直到下一个检查点。
💎 脚本实现:
下面是一个完整的示例脚本,展示了如何实现这个功能:
import time
from datetime import datetime, timedeltadef is_weekday():"""判断今天是否是工作日(周一到周五)"""weekday = datetime.now().weekday() # 0=Monday, 6=Sundayreturn weekday < 5 # 周一到周五def is_within_time_range(start_hour=8, end_hour=19):"""判断当前时间是否在指定的时间范围内"""now = datetime.now().time()start_time = datetime.strptime(f"{start_hour}:00", "%H:%M").time()end_time = datetime.strptime(f"{end_hour}:00", "%H:%M").time()return start_time <= now < end_timedef your_main_task():"""你的主任务逻辑,比如打印一条消息或执行某些操作"""print(f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] 正在执行主任务...")# 这里放你实际要执行的代码time.sleep(5) # 模拟任务耗时def main():print("定时任务启动中...")while True:current_time = datetime.now()print(f"当前时间: {current_time.strftime('%Y-%m-%d %H:%M:%S')}")if is_weekday() and is_within_time_range(8, 19):print("正在工作时间段内,执行任务...")your_main_task()else:# 计算距离下一个检查点的时间tomorrow = current_time + timedelta(days=1)next_check = datetime.combine(tomorrow.date(), datetime.min.time())sleep_seconds = (next_check - current_time).total_seconds()print(f"非工作时间段,休眠 {sleep_seconds:.0f} 秒直到明天重新检查。")time.sleep(sleep_seconds)if __name__ == "__main__":main()
📌 功能说明:
is_weekday():判断今天是否是周一到周五。is_within_time_range():判断当前时间是否在 8:00 到 19:00 之间。your_main_task():这是你要执行的主要逻辑,可以替换为你的实际代码。- 主循环会不断检查时间,符合条件就执行任务,否则进入休眠。
✅ 优点:
- 简单可靠,不依赖外部工具。
- 避免频繁轮询,节省资源。
⚠️ 注意事项:
- 精度:该脚本每天只在非工作时间休眠到次日零点再检查,如果你希望更精确(比如周末结束后自动恢复),可以改为每分钟检查一次,或者计算下一次“8:00”的时间作为唤醒点。
- 长期运行:建议将此脚本用
nohup、systemd或screen等方式后台运行,防止终端关闭中断。 - 跨平台兼容:此代码在 Windows/Linux/macOS 上均可运行。
🔁 更精细的睡眠策略(可选优化)
如果你想在每天 19:00 后只睡到第二天 8:00,而不是等到凌晨,可以这样改进:
else:# 计算明天早上8点的时间tomorrow = current_time + timedelta(days=1)next_start = datetime.combine(tomorrow.date(), datetime.strptime("08:00", "%H:%M").time())sleep_seconds = (next_start - current_time).total_seconds()print(f"非工作时间段,休眠 {sleep_seconds:.0f} 秒直到明天 8:00。")time.sleep(sleep_seconds)
这样更高效,避免了不必要的多次检查。
如果你希望使用系统级定时任务(如 Linux 的 crontab),也可以设置 cron 每天 8:00 启动脚本,但需要配合额外逻辑控制结束时间。而上面的 Python 方案是纯代码控制、自包含的推荐做法。
