python利用joblib进行并行数据处理的代码示例
更新时间:2023年10月08日 10:19:56 作者:m0_46483236
在数据量比较大的情况下,数据预处理有时候会非常耗费时间,可以利用 joblib 中的 Parallel 和 delayed 进行多CPU并行处理,文中给出了详细的代码示例,需要的朋友可以参考下
在数据量比较大的情况下,数据预处理有时候会非常耗费时间。
可以利用 joblib 中的 Parallel 和 delayed 进行多CPU并行处理
示例如下:
import random
import os
from glob import glob
from tqdm import tqdm
from joblib import Parallel, delayed
import soundfile as sf
import pycantonese as pct
from opencc import OpenCC
cc = OpenCC('s2hk')
######### ljspeech ##########
def process_ljspeech_one_utterance(wav_path, text, mode, save_root):
try:
tmp = wav_path.split('/')
spk = 'LJSpeech-1.1'
wname = tmp[-1]
tname = wname.replace('.wav','.txt')
text_to_path = f'{save_root}/{mode}/{spk}/{tname}'
os.makedirs(os.path.dirname(text_to_path), exist_ok=True)
fp = open(text_to_path, 'w')
fp.write(text)
fp.close()
wav_to_path = f'{save_root}/{mode}/{spk}/{wname}'
_, fs = sf.read(wav_path)
if fs != 16000:
cmd = f'sox {wav_path} -r 16000 {wav_to_path}'
else:
cmd = f'cp {wav_path} {wav_to_path}'
os.system(cmd)
assert False
except BaseException:
return
wavs_root = 'source_data/LJSpeech/LJSpeech-1.1'
data = []
with open(f'{wavs_root}/metadata.csv', 'r') as f:
lines = f.readlines()
for line in lines:
uttid = line.strip().split('|')[0]
wav_path = f'{wavs_root}/wavs/{uttid}.wav'
text = line.strip().split('|')[2]
data.append([wav_path, text])
f.close()
valid_data = random.sample(data, 100)
train_data = [dt for dt in data if dt not in valid_data]
Parallel(n_jobs=20)(delayed(process_ljspeech_one_utterance)(wav_path, text, mode='train', save_root='wavs/LJSpeech') for wav_path,text in tqdm(train_data))
Parallel(20)(delayed(process_ljspeech_one_utterance)(wav_path, text, mode='valid', save_root='wavs/LJSpeech') for wav_path,text in tqdm(valid_data))
# Parallel(n_jobs=20): 指定20个CPU(默认是分配给不同的CPU)
all_wavs = glob('wavs/LJSpeech/*/*/*.wav')
print(f'obtain {len(all_wavs)} wavs...')到此这篇关于python利用joblib进行并行数据处理的代码示例的文章就介绍到这了,更多相关python joblib并行数据处理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
解决Python中的ModuleNotFoundError: No module named 'pad
你是否在尝试导入`paddle`模块时遇到了"ModuleNotFoundError: No module named 'paddle'"这个错误?别担心,我们的指南会告诉你如何解决,这就像找到丢失的钥匙一样简单,让我们一起来看看如何解决这个问题吧!2024-03-03
OneFlow源码解析之Eager模式下Tensor存储管理
这篇文章主要为大家介绍了OneFlow源码解析之Eager模式下Tensor的存储管理实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-04-04
python使用requests+excel进行接口自动化测试的实现
在当今的互联网时代中,接口自动化测试越来越成为软件测试的重要组成部分,本文就来介绍了python使用requests+excel进行接口自动化测试的实现,感兴趣的可以了解一下2023-11-11


最新评论