【问题标题】:How would I prevent a python script that loops forever from using all my ram?我将如何防止永远循环的python脚本使用我所有的ram?
【发布时间】:2022-01-27 03:23:34
【问题描述】:

我想自动化游戏中点击几个按钮的过程,所以我编写了一个脚本来查找第一个按钮并点击它,然后点击另外两个。

import pyautogui as pag
import time

while True:
    if Click("Replay") == True:
        time.sleep(1)
        Click("Continue")
        time.sleep(1)
        Click("Repeat")
        time.sleep(1)
    else:
        time.sleep(5)

Click() 函数基本上接受一个字符串输入并将其转换为 input.png,将其与我拥有的按钮的 png 匹配,然后单击它。如果它没有找到它,它只是说它找不到它。

如果你需要的话,这里是:

def Click(image):
    image = str(image)
    location = pag.locateOnScreen(image + ".png")
    if location != None:
        point = pag.center (location)
        coordsX, coordsY = point
        pag.click(coordsX, coordsY)
        print("Clicked %s" % (image))
        return True
    else:
        print("Did not find %s Button" % (image))

我的最终目标是将它变成一个可执行文件,以便我可以将它发送给人们并且他们可以使用它,但我不希望它在运行它的计算机上浪费大量内存。我也不想增加它的等待时间,我相信我在某处看到它在 2GB 或其他东西后自行清除,但我不擅长编码,我不希望它首先使用那么多内存.我能做些什么来 A. 以较低的阈值清除它,或者 B. 首先让它不使用那么多内存?

【问题讨论】:

  • 您在哪里看到此脚本需要越来越多 RAM 的可能性?

标签: python


【解决方案1】:

对您的代码进行一些优化/清理:

  1. time.sleep(5) 不需要 else。
  2. 考虑在Click() 函数的else 子句中添加return False
  3. Pyautogui's website 表示 locateOnScreen 函数现在会引发错误,而不是返回 None,因此请考虑使用 try-except 块。 (如果它没有为您返回异常,请参阅this question 的已接受答案。)
  4. Pyautogui 允许单击 Point 对象,因此请改用它:
def Click(image):
    image = str(image)
    try:
        pag.click(pag.locateCenterOnScreen(image + ".png"))
        print("Clicked %s" % (image))
        return True
    except pag.ImageNotFoundException:
        print("Did not find %s Button" % (image))
        return False

我已经运行了这段代码,它几乎不占用我的内存。

【讨论】:

    猜你喜欢
    • 2017-06-07
    • 1970-01-01
    • 2015-12-09
    • 1970-01-01
    • 1970-01-01
    • 2013-02-19
    • 2018-11-14
    • 2014-05-30
    • 2017-05-21
    相关资源
    最近更新 更多