我想渲染大约500张图像并将它们保存到不同的png文件中,因此我写了一个包含我的数据集和渲染函数的小类
from mayavi import mlab
mlab.options.offscreen=True
class Dataset(object):
def __init__(self):
some init stuff etc
.
.
.
.
def save_current_frame_to_png(self, filename):
mlab.contour3d(self.frame_data, contours =30, opacity=0.2)
mlab.savefig(filename)
mlab.clf()
mlab.close()
gc.collect()
def create_movie_files(self):
folder_name = "animation"
try:
os.makedirs(folder_name)
except OSError:
raise OSError("Directory already exists.")
self.__go_to_first_frame()
for i in range(self.frames):
filename = "".join([folder_name, "/%.5i" % i, ".png"])
print filename
self.save_current_frame_to_png(filename)
self.read_single_frame()
self.__go_to_first_frame()
所以一切似乎都运行良好,但我看看内存使用量上升了
直到系统崩溃。所以我尝试使用mlab.clf()
和gc.collect()
来保持我的记忆力低,这是行不通的。我找到了mlab.close()
的解决方案,它似乎适用于内存使用,但这带来了一个新问题。
每次渲染新图像时,mayavi都会创建一个新窗口
程序崩溃大约200个窗口。也许是否有可能完全禁用Windows?在我看来,mlab.options.offscreen=True
仅禁用当前窗口内的绘图。
编辑:
self.frame_data
是一个numpy形状数组(100,100,100),self.read_single_frame()
只是从文本文件中读取下一帧并将其存储在self.frame_data
中。这个函数不会增加ram,如果我关闭渲染,内存使用率保持在1.2%。