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

如何在Python循环中暂停执行speedUp后恢复按键状态与进度?

解决方案

核心思路是把长时长的time.sleep拆分成小段循环检查,同时维护当前按键/鼠标的按下状态,这样每到30秒节点时可以临时释放状态、执行speedUp,再恢复状态继续执行剩余时长。

步骤1:添加状态管理与分段睡眠函数

先定义全局变量跟踪状态,再实现支持中断检查的睡眠函数:

import pyautogui
import time

# 全局状态跟踪
last_speedup_time = time.time()
pressed_keys = set()
pressed_mouse_buttons = set()

def sleep_with_check(duration):
    global last_speedup_time
    start_time = time.time()
    elapsed = 0
    while elapsed < duration:
        # 检查是否到了30秒间隔
        if time.time() - last_speedup_time >= 30:
            # 临时释放所有按键和鼠标
            for key in pressed_keys:
                pyautogui.keyUp(key)
            for btn in pressed_mouse_buttons:
                pyautogui.mouseUp(button=btn)
            
            # 执行speedUp并等待0.1秒
            speedUp()
            time.sleep(0.1)
            
            # 恢复之前的按键和鼠标状态
            for key in pressed_keys:
                pyautogui.keyDown(key)
            for btn in pressed_mouse_buttons:
                pyautogui.mouseDown(button=btn)
            
            last_speedup_time = time.time()
        
        # 每次睡0.01秒,避免阻塞太死
        sleep_chunk = min(0.01, duration - elapsed)
        time.sleep(sleep_chunk)
        elapsed = time.time() - start_time

步骤2:重构原有操作函数

把原来的RunD、RunA等函数改成用全局状态跟踪,并调用自定义睡眠函数:

def RunD(Down, Up):
    global pressed_keys, pressed_mouse_buttons
    # 记录按下状态
    pressed_keys.add('d')
    pressed_mouse_buttons.add('left')
    
    pyautogui.keyDown('d')
    pyautogui.mouseDown(button='left')
    sleep_with_check(Down)
    
    pyautogui.keyUp('d')
    pyautogui.mouseUp(button='left')
    # 移除状态
    pressed_keys.remove('d')
    pressed_mouse_buttons.remove('left')
    
    sleep_with_check(Up)

# 其他类似函数按同样方式重构(示例)
def RunA(Down, Up):
    global pressed_keys
    pressed_keys.add('a')
    pyautogui.keyDown('a')
    sleep_with_check(Down)
    pyautogui.keyUp('a')
    pressed_keys.remove('a')
    sleep_with_check(Up)

def Advance(Down, Up):
    global pressed_keys
    pressed_keys.add('w') # 按实际操作修改按键
    pyautogui.keyDown('w')
    sleep_with_check(Down)
    pyautogui.keyUp('w')
    pressed_keys.remove('w')
    sleep_with_check(Up)

def EnterD(Down, Up):
    global pressed_keys
    pressed_keys.add('d')
    pressed_keys.add('enter') # 按实际操作修改按键组合
    pyautogui.keyDown('d')
    pyautogui.keyDown('enter')
    sleep_with_check(Down)
    pyautogui.keyUp('d')
    pyautogui.keyUp('enter')
    pressed_keys.remove('d')
    pressed_keys.remove('enter')
    sleep_with_check(Up)

def EnterA(Down, Up):
    global pressed_keys
    pressed_keys.add('a')
    pressed_keys.add('enter') # 按实际操作修改按键组合
    pyautogui.keyDown('a')
    pyautogui.keyDown('enter')
    sleep_with_check(Down)
    pyautogui.keyUp('a')
    pyautogui.keyUp('enter')
    pressed_keys.remove('a')
    pressed_keys.remove('enter')
    sleep_with_check(Up)

def speedUp():
    # 写入你的speedUp逻辑
    pass

def buff():
    # 写入你的buff逻辑
    pass

步骤3:调整主循环

主循环保持原有逻辑,所有sleep已替换为带检查的版本,会自动触发每30秒的speedUp:

buff() # 初始调用一次
last_speedup_time = time.time() # 初始化speedup计时

for i in range(15):
    RunA(34.5,0)
    Advance(1,0)
    EnterD(0.2,0)
    RunD(34.5,0)
    Advance(1,0)
    EnterA(0.2,0)

关键说明

  • 分段睡眠的间隔(0.01秒)可按需调整,越小响应越及时,但会略微增加CPU占用。
  • 所有操作函数必须严格更新pressed_keys和pressed_mouse_buttons集合,确保状态准确。
  • 若有组合键或多鼠标按钮操作,只需在集合中添加对应元素,恢复时会全部重新按下。

内容的提问来源于stack exchange,提问作者Fares Dhouib

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 10:25:12