pyautogui.pixel(x,y) 在 while 循环中开始滞后
pyautogui.pixel(x,y) starts lagging in a while loop
我想检查屏幕上的像素何时发生变化,然后在像素发生颜色变化时放置键盘事件。但是大约 2-4 分钟后,当 pyautogui.pixel()
被多次调用时,计算机速度变慢。
这是我的代码
import pyautogui
OldC1 = None
while True:
NewC1 = pyautogui.pixel(750, 550)
if NewC1 != OldC1:
pyautogui.press('up')
OldC1 = NewC1;
有没有办法解决延迟问题?
我遇到过类似的问题,我的规避方法是直接使用PIL的函数,而不是pyautogui的包装函数:
from PIL import ImageGrab
pixelRGB = ImageGrab.grab().getpixel((x, y))
使用这个功能并没有降低我的电脑速度。
问题不在于您用来获取值的函数,而在于始终 运行 连续不断的无限循环。
如果不需要时间精度,那么我建议通过类似于 sleep()
的函数在循环周期上设置瓶颈
尝试:
from PIL import ImageGrab
import time
OldC1 = (0, 0, 0)
while True:
time.sleep(.3)
NewC1 = ImageGrab.grab().getpixel((750, 550))
if NewC1 != OldC1:
pyautogui.press('up')
OldC1 = NewC1
time.sleep(2)
会降低迭代频率,进而会在长 运行.
中带来更好的性能
编辑:
我没有使用 pyautogui
的像素函数来获取特定像素的 RGB 值,而是使用 PIL
(Python 成像库)模块中的 getpixel()
,原因是因为 pyautogui.pixel()
函数只是 ImageGrab.grab().getpixel()
的包装器,并且由于我们正在努力提高性能,我们应该直接使用 getpixel()
来提高性能。
PS:
pyautogui.pixel()
对总像素查找有限制,约为 10,000。 Read This Answer。这可能会导致不正确的结果,如果查找值超过 10,000,PIL
的 getpixel()
没有此阈值。
我想检查屏幕上的像素何时发生变化,然后在像素发生颜色变化时放置键盘事件。但是大约 2-4 分钟后,当 pyautogui.pixel()
被多次调用时,计算机速度变慢。
这是我的代码
import pyautogui
OldC1 = None
while True:
NewC1 = pyautogui.pixel(750, 550)
if NewC1 != OldC1:
pyautogui.press('up')
OldC1 = NewC1;
有没有办法解决延迟问题?
我遇到过类似的问题,我的规避方法是直接使用PIL的函数,而不是pyautogui的包装函数:
from PIL import ImageGrab
pixelRGB = ImageGrab.grab().getpixel((x, y))
使用这个功能并没有降低我的电脑速度。
问题不在于您用来获取值的函数,而在于始终 运行 连续不断的无限循环。
如果不需要时间精度,那么我建议通过类似于 sleep()
尝试:
from PIL import ImageGrab
import time
OldC1 = (0, 0, 0)
while True:
time.sleep(.3)
NewC1 = ImageGrab.grab().getpixel((750, 550))
if NewC1 != OldC1:
pyautogui.press('up')
OldC1 = NewC1
time.sleep(2)
会降低迭代频率,进而会在长 运行.
编辑:
我没有使用 pyautogui
的像素函数来获取特定像素的 RGB 值,而是使用 PIL
(Python 成像库)模块中的 getpixel()
,原因是因为 pyautogui.pixel()
函数只是 ImageGrab.grab().getpixel()
的包装器,并且由于我们正在努力提高性能,我们应该直接使用 getpixel()
来提高性能。
PS:
pyautogui.pixel()
对总像素查找有限制,约为 10,000。 Read This Answer。这可能会导致不正确的结果,如果查找值超过 10,000,PIL
的 getpixel()
没有此阈值。