200K という非常に大きな Python スクリプトがあり、できるだけメモリを節約したいと考えています。次のような内容です。
# 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初心者です。
どなたか正しい道を示していただけますか? この大きなスクリプトを分割してメモリ使用量を減らすにはどうしたらよいでしょうか? めったに使用されないコードをモジュールに入れて、必要なときだけ呼び出すのは価値があるでしょうか?
ベストアンサー1
主催:
Pythonスクリプトは確かに巨大なようです。まずはコードを再編成して、いくつかに分割することを検討したほうがよいかもしれません。モジュールまたはパッケージおそらく、コードのプロファイリングと最適化タスクが容易になるでしょう。
ぜひご覧になってみてください:
そしておそらく:
最適化:
コードを最適化するためにできることはたくさんあります...
たとえば、データ構造に関して... リストまたはリストの内包表記を多用する場合は、リストが本当に必要な場所と、リストをタプルなどの変更不可能なデータ構造、または「揮発性」オブジェクトやジェネレータ式などの「遅延」コンテナに置き換えることができる場所を特定することができます。
見る:
これらのページでは、役立つ情報やヒントをいくつか見つけることができます。
- http://wiki.python.org/moin/PythonSpeed
- http://wiki.python.org/moin/PythonSpeed/パフォーマンスのヒント
- http://wiki.python.org/moin/時間複雑度
- http://scipy.org/パフォーマンスPython
また、自分のやり方を研究し、もっと貪欲にやらない方法、Pythonでやった方が良い方法があるかどうか考えてみるべきです(タグにヒントがあります)。パイソン)...これは特にPythonに当てはまります。Pythonでは、一つの「明白な」方法(そしてただ一つだけ)他の人よりも優れたことをすること(Pythonの禅)は、パイソンこれは特にコードの形状に関係するものではなく、パフォーマンスにも関係します。多くの言語が、何でもできる方法がたくさんあるべきだという考えを推進しているのとは異なり、Pythonは最善の方法のみに焦点を当てています。明らかに、何かを行う方法はたくさんあるのですが、多くの場合、本当により良い。
ここで、Pythonicality がアルゴリズムを自動調整するわけではないので、作業を行うために最善の方法を使用しているかどうかも確認する必要があります。
しかし、最終的にはコードによって異なるため、コードを見ずに答えるのは難しいです。