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,提问作者バニーー
相关产品推荐
相关产品推荐

