首页 > 解决方案 > 我是否在 Python 中有效地使用 memory_usage 以及为什么会出现奇怪的行为?

问题描述

我可以使用一些帮助来清除一些利用“memory_profiler”中的“memory_usage”的python代码。该代码在语法上似乎有效,但是我不相信我从我的 memory_usage 调用中获得了准确的读数,并且我认为我可能做错了什么,因为这部分代码表现出一些奇怪的行为。

  1. 程序概述- 该代码是一个菜单驱动程序,允许用户指定数组的大小,用随机生成的数字填充该数组,然后应用各种排序算法来测量执行时间和内存利用率。为了测量时间,我使用“timeit”来测量我尝试使用“memory_usage”的内存。

  2. 程序结构——程序的主体主要是一个菜单,当用户在菜单中选择该算法时,该菜单对每个排序或计数算法进行函数调用。完成初始选择后,系统会提示用户指定他们想要构建的数组的所需大小tempArray = [randint(1, 10000) for i in range(size)]。构建数组后,用户可以选择是否要测量执行时间或内存利用率。

  3. 问题- 每当程序通过以下命令调用“memory_usage”时,它需要永远(即使使用“计数器”在 15 个数字的数组中查找“.most_common”事件)。它还通过阻止我结束程序(使用运行主菜单的“while True”循环中的“break”)来创建一些奇怪的行为。最终它将允许我在几个转义序列后退出,同时最终在退出时打印“MAX memory usage...”,但结果似乎不准确(即.. 27MB 来运行这个函数?)。

这是有问题的主要代码...

        if (structure == 1):
            tempArray = [randint(1, 10000) for i in range(size)]
            # Use the collections module counter class to count elements of the array
            print(most_frequent(tempArray))
            # To turn on memory analysis and check spacial usage
            mem_usage = memory_usage((most_frequent, (tempArray,)))
            print ("\nMAX memory usage in MB: ",max(mem_usage))

如果有帮助,这是返回数组中最常出现的元素的简短函数

# Function to determine entry frequency of an array or heap
def most_frequent(data):
    elements_count = Counter(data)
    # Return frequency counts
    return elements_count.most_common(10)

很高兴分享任何有用的附加代码。

也许我对 memory_profilier 的新手知识正在显示,或者也许有更好的方法来做到这一点。我愿意接受任何反馈、想法或建议。感谢任何帮助,tnx!

标签: pythonpython-3.xmemory

解决方案


推荐阅读