Я рекомендую использовать joblib для параллельного процесса с librosa. Я полагаю, что librosa использует это внутренне, так что это может избежать некоторых конфликтов. Ниже приведен рабочий пример, основанный на коде, который я регулярно использую для обработки некоторых файлов размером 10 КБ.
import os.path
import joblib
import librosa
import numpy
def compute(inpath, outpath):
y, sr = librosa.load(inpath)
S = librosa.feature.melspectrogram(y=y, sr=sr, n_mels=128, fmax=8000)
numpy.save(outpath, S)
return outpath
out_dir = 'temp/'
n_jobs=8
verbose=1
# as an reproducable example just processes the same input file
# but making sure to give them unique output names
inputs = [ librosa.util.example_audio_file() ] * 10
outputs = [ os.path.join(out_dir, '{}.npy'.format(n)) for n in range(len(inputs)) ]
jobs = [ joblib.delayed(compute)(i, o) for i,o in zip(inputs, outputs) ]
out = joblib.Parallel(n_jobs=n_jobs, verbose=verbose)(jobs)
print(out)
выход
[Parallel(n_jobs=8)]: Using backend LokyBackend with 8 concurrent workers.
[Parallel(n_jobs=8)]: Done 6 out of 10 | elapsed: 10.4s remaining: 6.9s
[Parallel(n_jobs=8)]: Done 10 out of 10 | elapsed: 13.2s finished
['temp/0.npy', 'temp/1.npy', 'temp/2.npy', 'temp/3.npy', 'temp/4.npy', 'temp/5.npy', 'temp/6.npy', 'temp/7.npy', 'temp/8.npy', 'temp/9.npy']