为防止长时间代码任务中断,需同步调整电源策略、禁用休眠机制、解除锁屏联动:windows需设屏幕/睡眠为“从不”、关闭高级休眠项并执行powercfg /h off;mac需在系统设置中设“永不”睡眠且终端运行sudo pmset -a sleep 0等命令;跨平台可在代码中调用setthreadexecutionstate持续声明系统活跃。

电脑在运行长时间代码任务(如模型训练、数据爬取、批量处理)时,系统因空闲自动进入睡眠或关闭屏幕,会导致任务中断、连接断开、进程终止;必须从电源策略、休眠机制、锁屏联动三方面同步干预,才能确保后台代码持续执行不被干扰。
Windows系统:基础电源设置禁用空闲响应
这一步直接切断最表层的触发路径,适用于所有Windows 10/11版本,操作后屏幕和系统将不再因等待时间到而关闭或休眠。
1、按 Win + I 打开“设置”→点击左侧“系统”→右侧选择“电源和电池”(Win11)或“电源和睡眠”(Win10)。
2、在“屏幕”区域,将“接通电源时”下的“关闭屏幕”设为【从不】。
3、在“睡眠”区域,将“接通电源时”下的“进入睡眠状态”同样设为【从不】。
4、注意:此设置仅作用于插电状态;若代码需在笔记本拔电后继续跑,也需同步修改“使用电池时”两处为“从不”,但会显著缩短续航。
Windows系统:高级电源设置封堵所有隐性休眠入口
图形界面设置无法覆盖合盖、电源按钮、硬盘休眠等底层行为,尤其对台式机或外接显示器的笔记本,必须进高级设置逐项关闭。
方法一:通过电池图标快速入口
1、右键任务栏右下角电池图标→选择“电源选项”→点击当前计划旁的“更改计划设置”→再点“更改高级电源设置”。
2、展开“睡眠”→将“睡眠后”“休眠后”“允许混合睡眠”三项在“接通电源”列全部设为【从不】或【关闭】。
3、展开“硬盘”→将“在此时间后关闭硬盘”在“接通电源”列设为【0 分钟】(即永不关闭)。
4、展开“电源按钮和盖子”→将“关闭盖子时”“按下电源按钮时”在“接通电源”状态下均设为【不采取任何操作】。
方法二:命令行一键重置超时值(需管理员权限)
1、按 Win + X →选“Windows 终端(管理员)”。
2、依次执行以下两条命令(每条回车一次):
powercfg /change monitor-timeout-ac 0
powercfg /change standby-timeout-ac 0
这两条命令强制将插电时的屏幕关闭与睡眠超时值写死为0,绕过图形界面可能存在的缓存延迟或未保存问题。
Windows系统:彻底删除休眠功能并释放资源
只要hiberfil.sys文件存在,系统就保有休眠能力,某些后台服务或快捷键(如Alt+F4→关机菜单选休眠)仍可能意外触发;必须用命令级操作永久移除。
1、以管理员身份打开终端(同上)。
2、输入:powercfg /h off,回车。
3、无任何报错即表示成功——hiberfil.sys 文件会被立即删除,通常释放4–8GB磁盘空间,且休眠选项从此在开始菜单和电源选项中消失。
4、该操作无需重启,即时生效;若后续需恢复休眠,可执行 powercfg /h on。
Mac系统:系统设置+终端双保险防休眠
Mac默认合盖即休眠,仅调节能耗滑块不够;必须启用“防止电脑自动进入睡眠”开关,并用终端命令封锁所有唤醒源,否则远程SSH、定时脚本或后台Python进程仍可能被中断。
第一步:系统设置分模式配置
1、苹果菜单 → “系统设置” → 左侧点“电池”。
2、先切换到“电池”标签页→将【显示器关闭前等待时间】和【电脑进入睡眠前等待时间】两个滑块拖至最右“永不”→再勾选【当显示器关闭时,防止电脑自动进入睡眠】。
3、切换到“电源适配器”标签页→重复第2步全部操作(两项滑块+勾选)。
4、向下滚动,取消勾选【电池供电时启用电能小憩】——否则即使插电,后台也可能被短暂挂起。
第二步:终端命令禁用全部睡眠路径
1、打开“访达”→“应用程序”→“实用工具”→双击“终端”。
2、一次性粘贴并执行以下命令(输密码时无显示,输完直接回车):
sudo pmset -a sleep 0 displaysleep 0 disksleep 0 hibernatemode 0 powernap 0
这条命令同时关闭电脑睡眠、显示器睡眠、硬盘睡眠、休眠模式及Power Nap,比单纯用 disablesleep 1 更彻底,避免iCloud同步、邮件拉取等后台行为偷偷唤醒系统。
跨平台通用:代码内嵌防休眠逻辑(VB6/Python/C#)
当无法控制用户系统设置,或需保障单个程序独占运行时,应在代码中主动声明“我正在工作”,让系统感知到活跃状态。此法不改全局策略,退出即恢复,最安全。
Python示例(需安装pywin32或使用ctypes):
在主循环开头插入以下代码段:
import ctypes
ES_CONTINUOUS = 0x80000000
ES_SYSTEM_REQUIRED = 0x00000001
ES_DISPLAY_REQUIRED = 0x00000002
ctypes.windll.kernel32.SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED | ES_DISPLAY_REQUIRED)
这行调用会持续阻止Windows进入睡眠、关闭屏幕、甚至锁屏;只要Python进程在运行,系统就认为“有人操作”。注意:必须在主线程中持续调用,建议放在每轮循环起始处。
VB6示例(声明后在Form_Load中调用):
Private Declare Function SetThreadExecutionState Lib "kernel32" (ByVal esFlags As Long) As Long
Const ES_CONTINUOUS = &H80000000
Const ES_SYSTEM_REQUIRED = &H1
Const ES_DISPLAY_REQUIRED = &H2
Private Sub Form_Load()
SetThreadExecutionState ES_CONTINUOUS Or ES_SYSTEM_REQUIRED Or ES_DISPLAY_REQUIRED
End Sub
该调用在窗体加载时激活,程序关闭时系统自动恢复原策略,不会影响用户其他操作。











