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

Python使用Mouse模块的autoclicker脚本CPS偏低如何优化效率?

问题原因定位

你推测的if判断拖慢效率是错误的,空循环跑if判断每秒可执行数十万次,完全不会影响100CPS以内的点击速率,你的代码性能瓶颈来自四个方面:

  • mouse.click()是封装好的上层接口,内部自带按下、松开的硬编码延迟,单次调用耗时就超过20ms,本身就限制了最高CPS很难超过50
  • 循环时间计算逻辑错误:点击、按键检测的执行时间会叠加到time.sleep()的等待时间上,CPS越高,额外执行耗时占比越大,实际点击间隔就远大于你设置的1/cps
  • time.sleep()在Windows系统默认计时器精度为15ms左右,当你设置的点击间隔小于20ms时,sleep的误差会被放大,进一步拉低实际CPS
  • 每次循环轮询按键状态的keyboard.is_pressed()调用存在固定开销,高频循环下累积耗时不可忽视
优化方案

核心优化点

  1. 替换封装的mouse.click()为手动按下+松开操作,砍掉内部冗余逻辑和默认延迟
  2. 改用键盘事件回调实现开关控制,去掉循环内的按键轮询开销
  3. 用高精度时间差计算替代固定sleep,用短时间忙等待补全间隔,抵消操作执行带来的时间损耗
  4. 关闭点击状态下降低循环频率,减少不必要的CPU占用

优化后代码

import mouse
import keyboard
import time

click_enabled = False
# 开关回调函数,按/切换状态
def toggle_click():
    global click_enabled
    click_enabled = not click_enabled

# 绑定/键的按下事件到回调
keyboard.add_hotkey('/', toggle_click)

cps_input = input("请输入你需要的每秒点击次数(CPS):")
cps = float(cps_input)
click_interval = 1 / cps
last_click_time = 0

print("按/键开始/暂停点击")
while True:
    current_time = time.perf_counter()
    # 只有开启状态且时间到了才点击
    if click_enabled and (current_time - last_click_time >= click_interval):
        mouse.press('left')
        mouse.release('left')
        last_click_time = current_time
        # 剩余时间大于10ms就小睡减少CPU占用,否则忙等保证精度
        remaining = click_interval - (time.perf_counter() - current_time)
        if remaining > 0.01:
            time.sleep(remaining - 0.005)
        elif remaining > 0:
            while time.perf_counter() - current_time < click_interval:
                pass
    else:
        # 未开启状态睡1ms,降低CPU占用
        time.sleep(0.001)

额外优化建议

如果还需要更高的CPS(超过100),可以换用更底层的Windows API调用实现点击,比如pywin32库的SendInput接口,比mouse库的调用效率更高,单次点击耗时可压缩到1ms以内。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 00:45:02