当我在Windows上运行此Python脚本但在Mac OS上运行时,为什么会得到STATUS_ACCESS_VIOLATION?

时间:2016-12-06 17:05:02

标签: python windows macos memory

我目前正在进行一些地质分析,并在加载大小为65MB的.tif文件时遇到此错误,因此相对较小。在我的Macbook Air上,它有4GB的RAM,我可以使用退出代码0运行以下代码;但是,在我的16GB Windows桌面上,程序以退出代码-1073741819(0xC0000005)退出,在Windows错误代码中表示STATUS_ACCESS_VIOLATION错误。

这里是产生上述结果的代码:

from osgeo import gdal
import sys, threading
gdal.UseExceptions()


def driver():
    ds = gdal.Open('srtm_21_05.tif')
    band = ds.GetRasterBand(1)
    elevation = band.ReadAsArray()

if __name__ == "__main__":
    driver()

我通过更改堆和递归限制来修复此问题:

if __name__ == "__main__":
    if sys.platform[:3] == "win":  # Checks if Windows
        sys.setrecursionlimit(10000000)
        threading.stack_size(200000000)
        thread = threading.Thread(target=driver)
        thread.start()
    else:
        driver()

允许脚本执行,但它最终会以代码-1073741819(0xC0000005)退出,就像之前一样。

为什么会这样?与两个系统上可用的内存相比,65MB是一个如此小的文件,正如我的Macbook所示,脚本可以正常执行。为什么我需要为Windows而不是Mac设置这些递归限制?

0 个答案:

没有答案