我的脚本正在调用librosa模块来计算短音频的 Mel 频率倒谱系数 (MFCC)。加载音频后,我想尽可能快地计算这些(以及其他一些音频功能) - 因此进行多处理。
问题:多处理变体比顺序慢得多。分析说我的代码花费了超过 90% 的时间在<method 'acquire' of '_thread.lock' objects>. 如果它是许多小任务,这并不奇怪,但在一个测试用例中,我将音频分成 4 个块,然后在单独的进程中处理。我认为开销应该最小,但实际上,它几乎和许多小任务一样糟糕。
据我所知,多处理模块应该分叉几乎所有的东西,并且不应该有任何争夺锁的斗争。然而,结果似乎显示出不同的东西。可能是下面的librosa模块保持某种内部锁吗?
我的分析结果为纯文本:https : //drive.google.com/open?id=17DHfmwtVOJOZVnwIueeoWClUaWkvhTPc
作为图片:https : //drive.google.com/open?id=1KuZyo0CurHd9GjXge5CYQhdWn2Q6OG8Z
重现“问题”的代码:
import time
import numpy as np
import librosa
from functools import partial
from multiprocessing import Pool
n_proc = 4
y, sr = librosa.load(librosa.util.example_audio_file(), duration=60) # load audio sample
y = np.repeat(y, 10) # repeat signal so that we can get more reliable measurements
sample_len = int(sr …Run Code Online (Sandbox Code Playgroud)