Python のパフォーマンスを最適化する方法が、この記事で説明する主な問題です。この記事では、一般的なコード最適化方法、パフォーマンス最適化ツールの使用方法、コード パフォーマンスのボトルネックを診断する方法について説明します。Python 開発者にとって参考になると幸いです。
Python コードの最適化に関する一般的なヒント
コードの最適化により、プログラムの実行結果を変えることなく、プログラムをより効率的に実行できます。 20 原則では、プログラムの再構築、最適化、拡張、および文書化関連事項の実装には、通常、作業負荷の 80% が必要です。最適化には通常、コードのサイズの削減とコードの動作効率の向上という 2 つの側面が含まれます。
アルゴリズムを改善し、適切なデータ構造を選択する
優れたアルゴリズムはパフォーマンスに重要な役割を果たす可能性があるため、パフォーマンス向上の最初のポイントはアルゴリズムを改善することです。アルゴリズムの時間計算量の順序は次のとおりです。
O(1) -> O(lg n) -> O(n ^) 3) -> O(n^k) -> O(k^n) -> O(n!)
したがって、時間計算量の点でアルゴリズムを改善できれば、パフォーマンスは向上します。改善は自明の理です。ただし、特定のアルゴリズムの改善についてはこの記事の範囲を超えており、読者はこの情報を自分で参照することができます。次の内容は、データ構造の選択に焦点を当てます。
•辞書とリスト
Python 辞書はハッシュ テーブルを使用するため、検索操作の複雑さは O(1) であり、リストは実際には配列全体を検索する必要があります。リストの複雑さは O(n) であるため、メンバーの検索やアクセスなどの辞書操作はリストよりも高速です。
リスト 1. コード dict.py
其中 sort_stats() 方法能够对剖分数据进行排序, 可以接受多个排序字段,如 sort_stats('name', 'file') 将首先按照函数名称进行排序,然后再按照文件名进行排序。常见的排序字段有 calls( 被调用的次数 ),time(函数内部运行时间),cumulative(运行的总时间)等。此外 pstats 也提供了命令行交互工具,执行 python – m pstats 后可以通过 help 了解更多使用方式。
大規模なアプリケーションの場合、Gprof2Dot、visualpytune、KCacheGrind などの一般的な視覚化ツールを使用してパフォーマンス分析結果をグラフィカルに表示できれば、非常に実用的かつ直感的になります。読者は関連する公式 Web サイトを自分で確認できます。この記事では詳しく説明しません。
Python パフォーマンス最適化ツール
Python のパフォーマンスの最適化には、アルゴリズムの改善と適切なデータ構造の選択に加えて、主要な Python コード部分を C 拡張モジュールに書き換えたり、より最適化されたパフォーマンスを持つインタープリターを選択したりするなど、いくつかの主要なテクノロジも含まれます。この記事では最適化ツールと呼びます。 Python には、Psyco、Pypy、Cython、Pyrex など、多くの最適化ツールが組み込まれています。これらの最適化ツールにはそれぞれ独自の利点があります。このセクションでは、いくつかを選択して紹介します。
サイコ
psyco は、ソース コードを変更せずに特定のパフォーマンスを向上させることができるジャストインタイム コンパイラーであり、操作をわずかに最適化されたマシン コードにコンパイルします。その操作は「ランタイム」、「コンパイル」の 3 つの異なるレベルに分かれています。 「時間」変数と「仮想時間」変数。そして、必要に応じて変数のレベルを上げたり下げたりします。ランタイム変数は、通常の Python インタープリターによって処理される単なる生のバイトコードとオブジェクト構造です。 Psyco が演算をマシン コードにコンパイルすると、コンパイル時変数はマシン レジスタと直接アクセス可能なメモリ位置に表現されます。同時に、Python はコンパイルされたマシン コードを将来の再利用のためにキャッシュできるため、時間を少し節約できます。ただし、Psyco には欠点もあります。現在、psyco は python2.7 でサポートされなくなり、メンテナンスやアップデートも提供されなくなりました。興味のある方は http://psyco.sourceforge.net/
を参照してください。ピピ
PyPy は「Python で実装された Python」を意味しますが、実際には RPython と呼ばれる Python のサブセットを使用して実装され、Python コードを C、.NET、Java およびその他の言語およびプラットフォーム用のコードに変換できます。 PyPy は、ジャストインタイム (JIT) コンパイラーを統合します。多くのコンパイラやインタプリタとは異なり、Python コードの字句解析や構文ツリーは考慮されません。 Python 言語で記述されているため、Python 言語のコード オブジェクトを直接利用します。コード オブジェクトは Python バイトコードの表現です。つまり、PyPy は Python コードに対応するバイトコードを直接分析し、文字形式またはバイナリ形式でファイルに保存するのではなく、Python ランタイム環境に保存します。現在のバージョンは 1.8 です。Windows に Pypy をインストールするには、まず https://bitbucket.org/pypy/pypy/downloads/pypy-1.8-win32.zip をダウンロードして解凍する必要があります。該当のディレクトリにコピーして解凍し、環境変数のパスに以下のパスを追加することができます。コマンド ラインで pypy を実行します。「MSVCR100.dll が見つからないため、このアプリケーションを開始できませんでした。アプリケーションを再インストールすると、この問題が解決される可能性があります。」というエラーが発生した場合は、Microsoft の公式 Web サイトから VS 2010 ランタイム ライブラリをダウンロードする必要があります。問題を解決してください。具体的なアドレスは http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=5555
です。インストールが成功したら、コマンド ラインで pypy を実行します。出力は次のとおりです。