How To Reduce Python Script Memory Usage

后端 未结 5 952
庸人自扰
庸人自扰 2021-01-30 03:00

I have a very large python script, 200K, that I would like to use as little memory as possible. It looks something like:

# a lot of data structures
r = [34, 78,         


        
5条回答
  •  遥遥无期
    2021-01-30 03:15

    Organazing:

    Your python script seems indeed to be huge, maybe you should consider reorganizing your code first, to split in into several modules or packages. It will probably make easier the code profiling and the optimization tasks.

    You may want to have a look there:

    • Python Project Howto
    • Python Packages
    • SO: Organising my Python project

    And possibly:

    • SO: Python: What is the common header format?
    • How do you organize Python modules?
    • The Hitchiker's Guide to Packaging

    Optimizing:

    There is a lot of things that can be done for optimizing your code ...

    For instance, regarding your data structures ... If you make a big use of lists or lists comprehensions, you could try to figure out where do you really need lists, and where they might be replaced by non-mutable data structures like tuples or by "volatile" objects, "lazy" containers, like generator expressions.

    See:

    • SO: Are tuples more efficient than lists in Python?
    • SO: Generator Expressions vs. List Comprehension
    • PEP 255 - Simple Generators and PEP 289 - Generator Expressions

    On these pages, you could find some useful information and tips:

    • http://wiki.python.org/moin/PythonSpeed
    • http://wiki.python.org/moin/PythonSpeed/PerformanceTips
    • http://wiki.python.org/moin/TimeComplexity
    • http://scipy.org/PerformancePython

    Also, you should study your ways for doing things and wonder whether there is a way to do that less greedily, a way that it's better to do it in Python (you will find some tips in the tag pythonic) ... That is especially true in Python, since in Python, there is often one "obvious" way (and only one) to do things which is better than the others (see The Zen of Python), which is said to be pythonic. It's not especially related to the shape of your code, but also - and above all - to the performances. Unlike a lot of languages, which promote the idea that there should be many ways for doing anything, Python prefers to focus on the best way only. So obviously, there are many ways for doing something, but often, one is really better.

    Now, you should also verify whether you are using the best methods for doing things, because pythonicality won't arrange your algorithms for you.

    But at last, it's very depending on your code it's difficult to answer without having seen it.

    And, make sure to take into account the comments made by eumiro and Amr.

提交回复
热议问题