【问题标题】:How can I clear ram after each for loops?如何在每个 for 循环后清除 ram?
【发布时间】:2023-03-28 07:09:01
【问题描述】:

以下代码是从干净信号创建嘈杂音频信号的代码,但是当我运行它时,我的内存已满,Spyder 冻结。我的整个音频数据文件是 2G。如何清理正在运行的代码或 for 循环结束时的内存?

for i in range(len(path_wav)):
    clean_file.append(path_wav[i])
    clean_wav.append(wave.open(clean_file[i], "r"))
    clean_amp.append(cal_amp(clean_wav[i]))
    clean_rms.append(cal_rms(clean_amp[i]))
    divided_noise_amp.append(np.resize(noise_amp,len(clean_amp[i])))
    noise_rms.append(cal_rms(divided_noise_amp[i]))
    adjusted_noise_rms.append(cal_adjusted_rms(clean_rms[i], snr))
    adjusted_noise_amp.append(divided_noise_amp[i] * (adjusted_noise_rms[i] / noise_rms[i]))
    mixed_amp.append((clean_amp[i] + adjusted_noise_amp[i]))
    save_waveform(path_wav_out[i] , clean_wav[i].getparams(), mixed_amp[i])

另外,我将 for 循环中断为多个小循环,但在运行第一个循环后,另一个循环的内存不是空的。

for i in range(0,int(len(path_wav)/10)):
    clean_file.append(path_wav[i])
    clean_wav.append(wave.open(clean_file[i], "r"))
    clean_amp.append(cal_amp(clean_wav[i]))
    clean_rms.append(cal_rms(clean_amp[i]))
    divided_noise_amp.append(np.resize(noise_amp,len(clean_amp[i])))
    noise_rms.append(cal_rms(divided_noise_amp[i]))
    adjusted_noise_rms.append(cal_adjusted_rms(clean_rms[i], snr))
    adjusted_noise_amp.append(divided_noise_amp[i] * (adjusted_noise_rms[i] / noise_rms[i]))
    mixed_amp.append((clean_amp[i] + adjusted_noise_amp[i]))
    save_waveform(path_wav_out[i] , clean_wav[i].getparams(), mixed_amp[i])
for i in range(int(len(path_wav)/10),int(2*len(path_wav)/10)):
    clean_file.append(path_wav[i])
    clean_wav.append(wave.open(clean_file[i], "r"))
    clean_amp.append(cal_amp(clean_wav[i]))
    clean_rms.append(cal_rms(clean_amp[i]))
    divided_noise_amp.append(np.resize(noise_amp,len(clean_amp[i])))
    noise_rms.append(cal_rms(divided_noise_amp[i]))
    adjusted_noise_rms.append(cal_adjusted_rms(clean_rms[i], snr))
    adjusted_noise_amp.append(divided_noise_amp[i] * (adjusted_noise_rms[i] / noise_rms[i]))
    mixed_amp.append((clean_amp[i] + adjusted_noise_amp[i]))
    save_waveform(path_wav_out[i] , clean_wav[i].getparams(), mixed_amp[i])

【问题讨论】:

  • 所有音频信号都存储在RAM中,就像它们存储在列表中一样。因为信号也存储在磁盘中。您无需将它们附加到列表中。

标签: python-3.x loops spyder ram


【解决方案1】:

您不能显式释放内存,但可以确保不会保留对对象的引用。 Python 是垃圾收集器,因此您可以在循环结束时调用垃圾收集器,以避免内存碎片,这将提高您的性能。

import gc
gc.collect()

但是您似乎在循环期间内存不足 - 您可以做的是重新组织您的代码 - 将您的代码分成更小的块并一一执行/gc,因此您的内存中不会有巨大的对象全部。

【讨论】:

  • 谢谢,但我想找到一个使用全部数据的解决方案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-10-15
  • 2017-09-16
  • 2021-10-23
  • 1970-01-01
  • 1970-01-01
  • 2015-03-13
  • 1970-01-01
相关资源
最近更新 更多