4
该mel_filters
函数使用np.load
函数加载预先计算的梅尔滤波器组矩阵。该函数不是线程安全的,这意味着如果同时从多个线程调用它,可能会损坏数据。
要解决此问题,您可以改用该torch.load
函数。该函数是线程安全的,因此如果同时从多个线程调用它不会损坏数据。
该mel_filters
函数使用np.load
函数加载预先计算的梅尔滤波器组矩阵。该函数不是线程安全的,这意味着如果同时从多个线程调用它,可能会损坏数据。
要解决此问题,您可以改用该torch.load
函数。该函数是线程安全的,因此如果同时从多个线程调用它不会损坏数据。
嗨@mzamini92,这太棒了!我建议您更新 PR 标题,以便它反映整体变更力求解决的问题。
就像是:
使用梅尔矩阵的线程安全加载
谢谢你的评论。完毕。
您好,感谢您指出这一点。有文档说明这np.load
不是线程安全的吗?我认为torch.load()
在任何一种情况下使用都是一个更好的主意,但是文档字符串和.npz
文件应该一起更新。
嗨@jongwook。是的 https://numpy.org/devdocs/reference/ generated/numpy.load.html 在警告中它说:加载包含对象数组的文件使用 pickle 模块,该模块不能防止错误或恶意构造的数据。考虑传递allow_pickle=False来加载已知不包含对象数组的数据,以便更安全地处理不受信任的源。另外,更新了下面的文档字符串。
该警告与线程安全无关,也torch.load()
与 unpickling 具有相同的安全隐患。此外,torch.save
与 不同的是,它不会执行压缩np.savez_compressed
,这会向 git 存储库添加一个巨大的二进制文件,或者使调用解压缩函数变得更加烦人。我只是补充allow_pickle=False
一下以解决您的担忧。