内存使用matplotlib如何清理ram?

2024-09-28 23:21:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在努力在函数执行后清除内存,我一直在尝试plt.close('all')、Del和gc.collect(),但都没有完成任务

''”
根据cwt系数创建比例图
in:系数:numpy数组
输出:三个chanell图像:numpy阵列
'''

def get_scalogram(coef, show = False):
    # create scalogram figure
    fig = plt.figure()
    ax1 = fig.add_subplot()
    ax1.imshow(abs(coef), interpolation = 'bilinear', cmap='jet', aspect='auto');
    plt.gca().invert_yaxis();
    fig.tight_layout(pad=False)
    plt.axis('off');

    # convert scalogram to np array
    fig.canvas.draw()
    data = np.frombuffer(fig.canvas.tostring_rgb(), dtype=np.uint8)
    data = data.reshape(fig.canvas.get_width_height()[::-1] + (3,))
    if show:
        fig.show()
    
    # clean
    plt.close('all');
    del fig
    gc.collect()
    
    
    return data

''”
浏览文件列表并生成比例图
(保存新的压缩文件:(图像、标签).npz)
输入:文件路径:(coef,freq,label).npz
'''

def generate_feats(filename):
    # extract coefs from file and get scalogram
    data = np.load(filename, allow_pickle=True)
    coef, freq, label = data['arr_0'], data['arr_1'], data['arr_2']
    image = get_scalogram(coef)
    
    # save
    filename = filename.replace("conc_data", "scalogram") # -> change dir
    filename = filename.replace(".wav.npz", "") 
    np.savez_compressed(filename+"_scalogram"+'.npz', image, label)

    # clean
    del image
    del data, coef, freq, label
    gc.collect()
# execution: 
a=process_map(generate_feats, glob.glob("/workspace/data/conc_data/*.npz"), max_workers=8, smoothing=0.0, chunksize=4)

Tags: datagetshownpfigpltfilenamegc