与ThreadPoolExecutor死锁

时间:2019-05-14 17:41:10

标签: python python-3.x

我正在尝试将大量音频文件(〜20000个)转换为声谱图,并且需要并行化转换以加快速度。 不幸的是(使用我的代码),执行是在随机执行之后冻结的,这可能是由于竞争条件造成的?

我已经尝试过将对象变量深复制到锁定的块(multiprocessing.Lock())中,但是没有成功。

这是上述类方法的一部分:


            sample, _ = librosa.load(
                self.folder_raw_audio / 'files' / (file + '.ogg'),
                sr=self.params['sampling_rate'],
                mono=self.params['mono']
            )

            if not self.params['mono'] and len(sample) != 2:
                sample = np.array([sample, sample])

            for t in self.cache_transformations:
                sample = t(sample)

            np.save(
                self.folder_spectrograms / (file + '.npy'),
                sample.astype(np.float32)
            )

        with ThreadPoolExecutor(max_workers=4) as executor:
            future = executor.map(f, [str(s) for s in self.samples[:, 0]])
            for _ in tqdm(future, total=len(self.samples)):
                pass

也许有人可以发现错误。

感谢您的任何建议:)

0 个答案:

没有答案