PBS vmem exceeded limit:我怎么知道内存超出了哪里?
PBS vmem exceeded limit: How can I know where the memory exceeds?
我有一个包含 1500000 个多边形的 shapefile,我需要找到每个多边形并将其与不同的网格相交。
我创建了一个简单的程序,从一个多边形到另一个多边形的交集(使用多处理),
pool = mp.Pool()
for index,pol in shapefile.iterrows():
# Limits each polygon in shapefile
ylat = lat_gridlimits
xlon= lon_gridlimits
args.append((dgrid,ylat,xlon,pol,index))
pool.starmap(calculate,args)
pool.close()
pool.join()
但是内存很快就满了,我得到一个错误
PBS:作业终止:vmem 超出限制
我如何知道内存超出的位置或时间?
或者有没有办法控制每个函数中的内存?
我试过这个(内部计算):
process = psutil.Process(os.getpid())
mem=process.memory_info().rss/(1024.0 ** 3)
vmem=psutil.virtual_memory().total / (1024.0 ** 3)
print("{} {}\n".format(mem,vmem))
但它无法帮助我找到位置
您 运行 内存不足的一个原因可能是因为您在 for 循环中使用迭代器迭代非常大的数据集。迭代这个集合可能需要比 python 程序允许在您的系统上使用更多的内存。一种节省内存的方法是将迭代器 shapefile.iterrows() 重写为生成器 returns 的函数,因为生成器计算需要读取的新索引而不是存储所有索引.
要了解有关生成器的更多信息,请访问以下 link:
我有一个包含 1500000 个多边形的 shapefile,我需要找到每个多边形并将其与不同的网格相交。
我创建了一个简单的程序,从一个多边形到另一个多边形的交集(使用多处理),
pool = mp.Pool()
for index,pol in shapefile.iterrows():
# Limits each polygon in shapefile
ylat = lat_gridlimits
xlon= lon_gridlimits
args.append((dgrid,ylat,xlon,pol,index))
pool.starmap(calculate,args)
pool.close()
pool.join()
但是内存很快就满了,我得到一个错误
PBS:作业终止:vmem 超出限制
我如何知道内存超出的位置或时间? 或者有没有办法控制每个函数中的内存?
我试过这个(内部计算):
process = psutil.Process(os.getpid())
mem=process.memory_info().rss/(1024.0 ** 3)
vmem=psutil.virtual_memory().total / (1024.0 ** 3)
print("{} {}\n".format(mem,vmem))
但它无法帮助我找到位置
您 运行 内存不足的一个原因可能是因为您在 for 循环中使用迭代器迭代非常大的数据集。迭代这个集合可能需要比 python 程序允许在您的系统上使用更多的内存。一种节省内存的方法是将迭代器 shapefile.iterrows() 重写为生成器 returns 的函数,因为生成器计算需要读取的新索引而不是存储所有索引.
要了解有关生成器的更多信息,请访问以下 link: