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

调用PIL.grab、load的多线程游戏bot运行一次后退出问题求助

修复方案

根因分析

代码的核心问题是线程run方法的try块末尾写了return x, y语句:一旦成功识别到游戏界面,执行到return就会直接终止run方法,线程随之退出,所以逻辑只会执行一次。未识别到界面时会抛出异常进入except分支,不会走到return,因此循环能持续运行。
此外代码还有两个可优化的问题:

  1. 空except会捕获所有类型的异常,会吞掉代码运行时的其他报错,不利于后续排查问题
  2. 循环没有添加延迟,会持续高频执行,占用大量CPU资源

修复后的完整代码

import pyautogui
from pyautogui import locateCenterOnScreen, press, release
from PIL import ImageGrab
from time import sleep
from threading import Thread

# 如果你用的pyautogui版本较低找不到ImageNotFoundException,可以删掉该导入,直接用except Exception即可
from pyautogui import ImageNotFoundException

class POT(Thread):
    def __init__(self):
        Thread.__init__(self)
        self.running = True

    def run(self):
        while self.running:
            try:
                x, y = locateCenterOnScreen('menu.PNG')
                img = ImageGrab.grab().load()
                text = img[x - 670, y - 730]
                text2 = img[x - 757, y - 730]
                if text[0] < 150:
                    for z in range(3):
                        press('0')
                        sleep(0.05)
                        release('0')
                        sleep(0.05)
                    print('HP USED')

                    if text2[0] < 150:
                        for z in range(3):
                            press('6')
                            sleep(0.025)
                            release('6')
                            sleep(0.025)
                            press('5')
                            sleep(0.033)
                            release('5')
                            sleep(0.033)
                        print('INTUITION USED 6')
                        print('AURA USED 5')
                print(x, y)
            except ImageNotFoundException:
                print("GAME SCREEN NOT FOUND...")
            # 每次循环后添加延迟,单位秒,可根据需求调整
            sleep(0.1)

bot=POT()
bot.start()
bot.join()

关键改动说明

  • 删除了try块末尾的return x, y语句,保证while循环可以持续执行
  • 统一只调用一次grab()截图,避免重复截图导致的坐标偏移和性能浪费
  • 替换空except为具体的异常捕获,避免吞掉其他运行时报错
  • 循环末尾添加固定延迟,降低CPU占用
  • 移除不必要的全局变量声明,x、y改为局部变量使用更安全,如果需要外部访问可以改为self.x、self.y存为实例属性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 11:15:00