如何减少Python脚本内存使用

Coo*_*inx 21 python optimization module organization package

我有一个非常大的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
Run Code Online (Sandbox Code Playgroud)

如果我把我很少使用的函数放在模块中,并且只在必要时动态导入它们,我就无法访问数据.就我而言,这就是我的意思.

我是python的新手.

任何人都可以把我放在正确的道路上吗?如何打破这个大脚本,以便它使用更少的内存?是否值得将很少使用的代码放在模块中,只在需要时调用它们?

ced*_*beu 33

Organzing:

您的python脚本似乎确实很大,也许您应该考虑首先重新组织代码,分成几个模块或包.它可能会使代码分析和优化任务变得更容易.

你可能想看看那里:

可能:

优化:

有很多事情可以用来优化你的代码......

例如,关于您的数据结构...如果您大量使用列表或列表推导,您可以尝试找出您真正需要列表的位置,以及它们可能被替换为非可变数据结构(如元组或通过"volatile"对象,"懒惰"容器,如生成器表达式.

看到:

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

此外,你应该研究你做事的方式,并想知道是否有办法减少贪婪,这是一种在Python中更好的方法(你会发现pythonic标签中的一些提示)......特别是在Python中是真的,因为在Python中,通常有一种"明显"的方式(并且只有一种)来做比其他方式更好的方法(参见Python的Zen),据说它是pythonic.它与你的代码的形状没有特别的关系,而且最重要的是与表演有关.与许多语言不同,Python推广应该有很多方法可以做任何事情,但Python更喜欢只关注最好的方法.很明显,有很多方法可以做某事,但通常情况下,一个方法确实更好.

现在,您还应该验证您是否使用最佳方法来执行操作,因为pythonicality不会为您安排算法.

但最后,它很大程度上取决于你的代码,如果没有看到它就很难回答.

并且,请务必考虑eumiroAmr的评论.

  • [memory_profiler](http://pypi.python.org/pypi/memory_profiler)非常实用,易于使用,可以快速调试.现在你可以试试[meliae](https://code.launchpad.net/meliae)([循序渐进的方法](http://jam-bazaar.blogspot.ie/2010/08/step- by-step-meliae.html))或[heapy](http://guppy-pe.sourceforge.net/#Heapy)获取更完整的解决方案.很好的讨论[这里](http://stackoverflow.com/questions/110259/python-memory-profiler)和一些有趣的估算方法[这里](http://stackoverflow.com/questions/563840/how-can-i -check最内存使用-的对象功能于IPython中) (3认同)

Ned*_*der 2

移动函数不会改变你的内存使用情况。一旦导入其他模块,它将定义该模块中的所有函数。但函数不会占用太多内存。它们是否极其重复,也许您可​​以通过重构函数来减少代码?

@eumiro 的问题是正确的:您确定您的脚本使用了太多内存吗?它使用了多少内存,为什么过多?