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

Python持续循环CPU占用过高优化及代码改进咨询

问题

我的Python代码能正常运行,但CPU占用过高,排查后发现是无限while循环导致的。想找低CPU占用的持续循环方案,也欢迎对现有代码的操作逻辑提改进建议。我试过用asyncio事件循环,但效果不好。现有代码如下:

from selenium import webdriver
import pyautogui
import time
import keyboard
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
browser = webdriver.Chrome(options=chrome_options)
browser.get("https://animeisrael.website/watch/fulllink/op/fulllinkop-268.php")
browser.fullscreen_window()
me = 268

while True:
    if keyboard.is_pressed('l'):
       browser.close()
       me+=1
       hello = str(me)
       browser = webdriver.Chrome(options=chrome_options)
browser.get("https://animeisrael.website/watch/fulllink/op/fulllinkop-"+hello+".php")
       browser.fullscreen_window()
       time.sleep(2)
       pyautogui.doubleClick(960,648)
       time.sleep(1)
       pyautogui.click(960,648)
       pyautogui.press('f')
解决方案

一、解决CPU占用高的核心:用阻塞式按键监听替代轮询循环

原来的while True一直循环检查按键状态,会让CPU持续处于高负载。改成等待按键触发再执行逻辑的模式,程序在无操作时会进入休眠状态,CPU占用几乎为0。可以用keyboard库的add_hotkey或wait方法实现,无需自己写死循环。

二、操作逻辑优化建议

  1. 复用浏览器实例:每次关闭再重启浏览器不仅耗时,还浪费系统资源,直接在当前窗口加载新URL即可。
  2. 替换PyAutoGUI操作:依赖屏幕坐标的点击逻辑不稳定,换用Selenium直接操作网页元素,适配不同分辨率和窗口状态。
  3. 规范变量命名:比如把me改成current_episode,hello改成episode_url,提升代码可读性。
  4. 添加异常处理:避免加载网页或操作元素时出错导致程序崩溃。

优化后的代码示例

from selenium import webdriver
import keyboard
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 初始化浏览器配置
chrome_options = Options()
# 可选:添加无头模式(不显示浏览器窗口)
# chrome_options.add_argument("--headless=new")

# 只启动一次浏览器
browser = webdriver.Chrome(options=chrome_options)
browser.fullscreen_window()

current_episode = 268

def load_next_episode():
    global current_episode
    current_episode += 1
    # 用f-string拼接URL更简洁
    episode_url = f"https://animeisrael.website/watch/fulllink/op/fulllinkop-{current_episode}.php"
    
    # 直接在当前浏览器加载新剧集
    browser.get(episode_url)
    browser.fullscreen_window()
    
    try:
        # 等待播放按钮加载完成再点击(请根据实际网页调整元素选择器)
        play_button = WebDriverWait(browser, 10).until(
            EC.element_to_be_clickable((By.CSS_SELECTOR, "button.play-btn"))
        )
        play_button.click()
        
        # 用JS实现视频全屏,替代按F键的操作
        browser.execute_script("document.querySelector('video').requestFullscreen();")
    except Exception as e:
        print(f"加载剧集出错: {e}")

# 绑定L键,按下即触发下一集加载
keyboard.add_hotkey('l', load_next_episode)

# 按ESC键退出程序,保持主进程运行
keyboard.wait('esc')

# 退出时关闭浏览器
browser.quit()

代码说明

  • 低CPU占用:通过add_hotkey绑定快捷键,只有触发按键时才执行逻辑,平时程序处于休眠状态。
  • 资源高效利用:浏览器仅启动一次,每次加载新剧集直接跳转URL,节省启动时间和系统资源。
  • 操作稳定性提升:用Selenium等待网页元素,避免PyAutoGUI依赖屏幕坐标的不确定性。
  • 可控退出机制:按ESC键可正常关闭浏览器并终止程序,无需强制结束进程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 19:43:28