什么是完成一项大型且重复性任务的最佳方法?

时间:2019-11-30 19:51:32

标签: performance audio python-3.6

我需要获得18000多个音频的持续时间,每个音频使用convert库大约需要300毫秒,即至少需要25〜30分钟的处理时间。

使用audioreadQueue系统,使用处理器的所有可用内核,我可以将每个音频的平均处理时间降低到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编辑对象。

1 个答案:

答案 0 :(得分:0)

我会考虑使用一种兼容的解决方案来加速您的脚本。 Python线程仍然有改进的余地。

尝试一种编译语言。

如果您仍然需要python,请根据系统支持的不同,将尽可能多的函数分配给不同的线程。使用threading.thread

有关Python中有效循环的信息,另请参见this wiki。故事的要旨是for循环会产生开销。