如何减少Python脚本内存Usag

2024-06-09 07:01:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个非常大的python脚本,200K,我希望使用尽可能少的内存。它看起来像:

# a lot of data structures
r = [34, 78, 43, 12, 99]

# a lot of functions that I use all the time
def func1(word):
    return len(word) + 2

# a lot of functions that I rarely use
def func1(word):
    return len(word) + 2


# my main loop
while 1:
   # lots of code
   # calls functions

如果我将很少使用的函数放在模块中,并仅在必要时动态导入它们,则无法访问数据。这是我所能得到的。

我是python新手。

有人能让我走对路吗?我怎样才能把这个大的脚本分解成更小的内存?是否值得将很少使用的代码放在模块中,并且只在需要时调用它们?


Tags: 模块of内存脚本datalenreturnthat
3条回答

组织:

您的python脚本看起来确实很大,也许您应该考虑首先重新组织代码,以便分成几个modules or packages。它可能会使代码分析和优化任务变得更容易。

你可能想看看那里:

可能还有:

优化:

有很多事情可以做来优化你的代码。。。

例如,关于你的数据结构。。。如果您大量使用列表或列表理解,您可以尝试找出真正需要列表的位置,以及它们可能被不可变的数据结构(如元组)或“易失性”对象、“惰性”容器(如生成器表达式)替换的位置。

见:

在这些页面上,您可以找到一些有用的信息和提示:

另外,你应该研究一下你做事的方式,想知道是否有一种方法可以让你不那么贪婪,用Python做的更好(你可以在标签pythonic中找到一些技巧)。。。在Python中尤其如此,因为在Python中,通常有一种“明显”的方式来做比其他方式更好的事情(参见The Zen of Python),这就是pythonic。它与代码的形状并没有特别的关系,但更重要的是与性能有关。与许多语言不同,许多语言提倡应该有很多方法来做任何事情,Python更喜欢只关注最好的方法。很明显,有很多方法可以做一些事情,但通常有一种方法可以做得更好。

现在,你也应该验证你是否在使用最好的方法来做事情,因为pythonicality不会为你安排你的算法。

但最后,这取决于你的代码,不看代码很难回答。

而且,一定要考虑到eumiroAmr所做的评论。

关于生成器表达式和模块使用的建议是好的。过早的优化会导致问题,但是在开始编写代码之前,您应该花几分钟时间考虑一下您的设计。尤其是如果代码是要重用的话。

顺便说一下,您提到在脚本的顶部定义了许多数据结构,这意味着它们在开始时都被加载到内存中。如果这是一个非常大的数据集,请考虑将特定的数据集移动到单独的文件中,并仅在需要时加载它。(使用csv模块或numpy.loadtxt()等)

除了使用更少的内存之外,还要研究如何更有效地使用内存。例如,对于大型数值数据集,numpy数组是一种存储信息的方法,可以在计算中提供更好的性能。在http://wiki.python.org/moin/PythonSpeed/PerformanceTips有一些稍微过时的建议

相关问题 更多 >