Python脚本运行一段时间然后返回MemoryError(python 3.3)

时间:2013-03-13 02:08:30

标签: python python-3.x tkinter python-imaging-library pywin32

我有一个小脚本,它使用Python3.3的Python Imaging Library模块(在Win7,8GB的RAM上)每秒一次屏幕截图(~40x50)屏幕截图并进行比较我必须检测特定模式的图像,并执行我创建的其他两个模块。脚本似乎在前30分钟左右完美运行,但随后脚本崩溃,我收到以下错误:

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()

添加新数据之前清除剪贴板

1 个答案:

答案 0 :(得分:0)

我无法找到完全解决内存问题的适当解决方案(甚至在不同条件下复制它),所以我只是将操作间隔从1秒增加到15秒而我还没有得到内存错误试。