簡體   English   中英

如何防止永遠循環使用我所有 ram 的 python 腳本?

[英]How would I prevent a python script that loops forever from using all my ram?

我想自動化在游戲中單擊幾個按鈕的過程,所以我編寫了一個腳本來查找第一個按鈕並單擊它,然后單擊另外兩個。

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() function 基本上接受一個字符串輸入並將其轉換為 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))

我的最終目標是將它變成一個可執行文件,以便我可以將它發送給人們並且他們可以使用它,但我不希望它在運行它的計算機上浪費大量 memory。 我也不想增加它的等待時間,而且我相信我在某處看到它在 2GB 或其他東西后自行清除,但我不擅長編碼,我不希望它首先使用那么多內存. 我能做些什么來 A. 以較低的閾值清除它,或者 B. 首先讓它不使用那么多內存?

我之前做過類似的事情,使用 pyautogui。 即使在幾周后運行類似的代碼時,我也沒有看到任何性能問題。

您可能想先嘗試一下,因為我懷疑它會使用那么多 RAM。

對您的代碼進行一些優化/清理:

  1. time.sleep(5)不需要 else 。
  2. 考慮在Click()函數的 else 子句中添加return False嗎?
  3. Pyautogui 的網站locateOnScreen function 現在會引發錯誤,而不是返回None ,因此請考慮使用 try-except 塊。 (如果它沒有為您返回異常,請參閱此問題的已接受答案。)
  4. Pyautogui 允許單擊點 object,因此請改用:
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

我已經運行了這段代碼,它對我來說幾乎沒有使用 RAM。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM