我有一個小腳本,利用Python3.3的Python圖像庫模塊(在Win7上,8 GB的RAM)截取一個小的( 〜40x50)像素面積每秒一次,並將其與我已經必須檢測特定圖案的圖像進行比較,並執行我創建的其他兩個模塊(如果找到它)。該腳本似乎完美前30分鐘左右的工作,但隨後的腳本崩潰,我得到以下錯誤:Python腳本運行良好一段時間然後返回MemoryError(python 3.3)
Traceback (most recent call last):
File "<string>", line 420, in run_nodebug
File "C:\Users\Nate Simon\Dropbox\CaptchaLibrary\detectNRun.py", line 68, in <module>:
im2 = ImageGrab.grab((left,upper,right,lower))
File "C:\Python33\lib\site-packages\PIL\ImageGrab.py", line 47, in grab:
size, data = grabber()
MemoryError
我已經調整截圖的時間,它所做的是延遲時該程序崩潰。
這裏是什麼似乎是有問題的代碼:
im2 = ImageGrab.grab((left,upper,right,lower)) # Take a screenshot at given coordinates
for x in range(im2.size[0]): # This section just changes to image to black/white for better comparing but might be relevant.
for y in range(im2.size[1]):
pixel = im2.getpixel((x,y))
if pixel[0] < 40 or pixel[1] < 40 or pixel[2] < 40:
color = (0, 0, 0)
else:
color = (255, 255, 255)
im2.putpixel((x,y), color)
沒有列表,字典,或數據庫被添加到這個腳本,每次運行的舊截圖在內存被覆蓋(它永遠不會保存到磁盤)。
也可能相關:從時間模塊我使用sleep()
延遲和time()
來跟蹤系統時間。我也使用WIN32API鼠標/鍵盤輸入,並使用Tkinter的讀取剪貼板下面幾行:
c = Tk()
c.withdraw()
result = c.clipboard_get()
c.destroy()
在另一個部分,剪貼板之前,新的數據清零加入c.clipboard_clear()
您是否試圖用您提供的一段代碼重現問題,以確保它是由什麼引起的?只要讓它像瘋了一樣截圖,直到它崩潰。 – wldsvc 2013-03-13 02:15:48
這是一種瘋狂的低效方式來限制圖像。嘗試使用'Image.point'方法而不是嵌套循環,並查看你的內存問題是否消失。 – wim 2013-03-13 02:29:34
我跑了它沒有延遲和孤立代碼的一部分,但我無法複製錯誤。我想我會努力隔離不同的部分,直到找到問題。 @wim非常感謝您的提示,我會盡快實施。 – 2013-03-13 02:52:38