You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows虚拟机断开后time.sleep()及倒计时功能冻结求助

解决Windows虚拟机断开连接后Python睡眠/倒计时冻结的问题

问题根源

Windows虚拟机断开远程桌面(RDP)连接后,系统会触发会话挂起机制——即便你禁用了睡眠/休眠,非活跃会话的进程执行优先级会被大幅降低,甚至暂停时间推进,导致time.sleep()或自定义倒计时完全卡住。

解决方案

  • 禁用会话挂起策略

    1. 运行gpedit.msc打开组策略编辑器,依次展开:
      计算机配置 > 管理模板 > Windows组件 > 远程桌面服务 > 远程桌面会话主机 > 会话时间限制
    2. 把「设置断开连接的会话的时间限制」「设置活动但空闲的远程桌面服务会话的时间限制」全部设为已禁用。
    3. 如果组策略无效,直接改注册表:
      打开regedit,定位到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server,将MaxDisconnectionTime和MaxIdleTime的十进制值设为0。
  • 强制保持会话活跃
    用Windows API模拟微小的用户操作,让系统认为会话处于活跃状态,避免被挂起。可以开个后台线程执行:

    import win32api
    import win32con
    import threading
    import time
    
    def keep_alive(interval=300):
        while True:
            # 模拟按下并释放Shift键(无实际操作,仅标记会话活跃)
            win32api.keybd_event(win32con.VK_SHIFT, 0, 0, 0)
            win32api.keybd_event(win32con.VK_SHIFT, 0, win32con.KEYEVENTF_KEYUP, 0)
            time.sleep(interval)
    
    # 启动后台线程
    threading.Thread(target=keep_alive, daemon=True).start()
    
  • 替换time.sleep为时钟轮询
    不要依赖单次长睡眠,改用基于系统时钟的循环检查,即使中间会话暂停,恢复后会立刻修正时间差:

    import time
    
    def reliable_sleep(duration):
        target_time = time.time() + duration
        while time.time() < target_time:
            # 每次短睡眠10秒,避免长时间阻塞
            time.sleep(min(10, target_time - time.time()))
    

    用这个函数替代原代码中的time.sleep()即可。

  • 虚拟化平台层面设置
    如果用VMware/Hyper-V这类平台,进入虚拟机的电源管理设置,确保「当远程连接断开时」设置为不采取任何操作,有些平台会单独控制会话的资源分配。

内容的提问来源于stack exchange,提问作者Andrew Cm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 22:42:45