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

Python程序空闲时CPU占14%,运行时仅4%的原因咨询

解决键盘检测循环导致的高CPU占用问题

你的问题核心在于toggle关闭时,while True是无停顿的空轮询——CPU一直在高速重复执行keyboard.is_pressed()检测,没有任何空闲时间,所以占用率飙升;而toggle开启后,pyautogui的点击、按键、图像识别操作本身包含内部延迟(比如图像识别需要耗时处理),相当于给循环加了“缓冲”,CPU占用自然降下来了。

解决方案1:给循环添加固定微小延迟

在while循环末尾加一个极短的sleep,让CPU有时间休息,哪怕0.01秒的延迟也能大幅降低CPU占用:

toggle = False
while True:
    if keyboard.is_pressed(TOGGLE_KEY):
        toggle = not toggle
        if toggle:
            print('Dialogue Skipping ON.')
        else:
            print('Dialogue Skipping OFF.')
            time.sleep(1)

    if toggle:
        pyautogui.click(*DIALOGUE_SKIP_POSITION)
        pyautogui.press('space')

        try:
            dialogue = pyautogui.locateOnScreen(
                dialogue_image, confidence=CONFIDENCE_THRESHOLD, region=SEARCH_REGION)
            if dialogue:
                pyautogui.click(dialogue)
        except pyautogui.ImageNotFoundException:
            pass
    
    # 给CPU留休息时间,调整数值可平衡响应速度与占用率
    time.sleep(0.01)

解决方案2:改用键盘事件监听替代轮询

放弃while True轮询的方式,用keyboard库的事件回调处理按键触发,程序平时处于休眠状态,只有按键时才唤醒执行,CPU占用几乎可以忽略:

import keyboard
import pyautogui
import time

toggle = False
DIALOGUE_SKIP_POSITION = (x, y)  # 替换为你的实际坐标
dialogue_image = "path/to/your/image.png"
CONFIDENCE_THRESHOLD = 0.8
SEARCH_REGION = (x1, y1, x2, y2)  # 替换为你的实际区域

def toggle_skip():
    global toggle
    toggle = not toggle
    if toggle:
        print('Dialogue Skipping ON.')
        run_skip_loop()
    else:
        print('Dialogue Skipping OFF.')
        time.sleep(1)

def run_skip_loop():
    while toggle:
        pyautogui.click(*DIALOGUE_SKIP_POSITION)
        pyautogui.press('space')

        try:
            dialogue = pyautogui.locateOnScreen(
                dialogue_image, confidence=CONFIDENCE_THRESHOLD, region=SEARCH_REGION)
            if dialogue:
                pyautogui.click(dialogue)
        except pyautogui.ImageNotFoundException:
            pass
        time.sleep(0.01)

# 注册快捷键监听
keyboard.add_hotkey(TOGGLE_KEY, toggle_skip)

# 保持程序运行
keyboard.wait()

方案1是最小改动就能解决问题的快速调整方案;方案2更优,彻底避免了无意义的轮询,CPU友好性更强。

内容的提问来源于stack exchange,提问作者バニーー

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 07:44:56