我需要获得18000多个音频的持续时间,每个音频使用convert
库大约需要300毫秒,即至少需要25〜30分钟的处理时间。
使用audioread
和Queue
系统,使用处理器的所有可用内核,我可以将每个音频的平均处理时间降低到70ms,但是仍然需要21分钟,我该如何改善这个?我希望能够在至少5分钟内阅读所有音频,并记住我在机器上没有竞争,它只会运行我的软件,因此我可以消耗所有资源。
功能码读取持续时间:
Process
创建流程的代码:
def get_duration(q, au):
while not q.empty():
index = q.get()
with audioread.audio_open(au[index]['absolute_path']) as f:
au[index]['duration'] = f.duration * 1000
在我的代码中,只有一个for i in range(os.cpu_count()):
pr = Process(target=get_duration, args=(queue, audios, ))
pr.daemon = True
pr.start()
和一个Queue
,我使用Process
编辑对象。
答案 0 :(得分:0)
我会考虑使用一种兼容的解决方案来加速您的脚本。 Python线程仍然有改进的余地。
尝试一种编译语言。
如果您仍然需要python,请根据系统支持的不同,将尽可能多的函数分配给不同的线程。使用threading.thread
。
有关Python中有效循环的信息,另请参见this wiki。故事的要旨是for循环会产生开销。