如何限制python GDAL VRT读取的RAM使用率

问题描述

当使用python gdal库读取VRT区域时,RAM使用率一直保持增加到大约50%的可用内存。在普通计算机上,这很好,但在具有大量可用RAM的计算群集上运行时,就会成为问题。

有没有办法限制gdal使用多少RAM?

编辑:

我正在使用vrt.ReadAsArray(...)一次读取256x256像素的块,这些块立即使用,以后不再需要。但是,从内存消耗来看,gdal会将读取的切片保留在内存中,以防万一再次需要它们,直到可用内存大约填满50%。只有这样,它才会开始从RAM中删除未使用的图块。不管我在什么程序上运行硬件,内存消耗都会随着时间的推移不断增加,直到达到50%。

我想将其限制为32Gb RAM。

我发现gdal的CHACHE_MAX配置选项。但是,在使用gdal.GetCacheUsed()检查已使用的缓存量时,它显然总是为0。因此,尽管该选项听起来很有希望,但这似乎无法提供解决方案。

解决方法

我终于做了一些测试,找到了解决方案,以防其他人遇到这个问题。

尽管gdal.GetCacheUsed()始终返回0,但是更改CACHE_MAX config选项对我来说解决了这个问题。可以在python这样设置:

from osgeo import gdal
gdal.SetCacheMax(134217728) # 134Mb

虽然我无法弄清楚此限制的适用程度,但缓存大小似乎是每个波段,每个VRT中的栅格,每个VRT,每个进程。也就是说,具有许多栅格和波段等的VRT的内存使用量将更高。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...