Python:为什么我的O(n)随着它的进展而减速?

时间:2015-06-09 15:26:03

标签: python performance optimization slowdown

所有我正在迭代文件列表。出于某种原因,它的拍摄速度高达约30%,然后减速到令人愤怒的爬行。

我已经查看了它开始变慢时应该存在的文件,并且它们的大小确实增长了一些,但它们并没有线性增长。代码如下:

for i in wavs:
    gc.collect()
    print_progress_bar(wavs.index(i)/len(wavs))
    shapes.append(getshape(i.src_path))

我正在读map()是一种加速循环的方法,但我觉得循环开销不是正在增长的。 gc.collect()在这里帮助我吗?

以下是被调用的函数:

def print_progress_bar(percent):
    done_len = int(percent * progress_bar_length)
    bar = "["
    bar += "=" * done_len
    bar += ">"
    bar += " " * (progress_bar_length - done_len)
    bar += "] "
    bar += str(round(percent*100, 2))
    bar += "%"
    print("\r", end='')
    print(bar+(" " * 5), end='')
    sys.stdout.flush()

def getshape(path):
    if getsize(path) == 0:
            return (0,)

    try:
            this_wav = wave.open(path, 'r')
    except:
            temp_path = "C:\\soundfiles\\tempwav.wav"
            command = ["sox", path , "-r", "8000" ,  "-c" ,  "1", "-e", "unsigned", temp_path]
            convert = subprocess.Popen(command)
            convert.wait()

            this_wav = wave.open(temp_path, 'r')
    finally:
            num_frames = this_wav.getnframes()
            frames = this_wav.readframes(num_frames)
            this_wav.close()
            this_wav_array = list(map(lambda x: x, frames))

            return numpy.fft.fft(this_wav_array).shape or (0,)

我尝试过分析,但后来的部分掩盖了此处显示的内容。这将填充shapes列表以供稍后进行比较。根据我手动检查的情况,需要异常的wav文件分布均匀。

这不是剧本的“肉”,但它变得很烦人。有什么想法吗?

0 个答案:

没有答案