前回の記事「Pythonを使った高パフォーマンステストツールの実装(1)」では、Pythonパーサーを変更することでパフォーマンスの最適化を行いましたが、まだまだ実際のニーズには程遠いです。この記事では、自動テスト用に最適化されたコードを紹介します。
オプション 2: コードを最適化する
作業者が仕事をうまくこなしたい場合は、まずツールを磨く必要があります。コードを最適化するには、まずコードのボトルネックを見つける必要があります。最も簡単な方法はログを追加するか出力することですが、デバッグが完了した後に削除する必要があり、これはさらに面倒です。 Python には、profile、cProfile、hotshot、pystats などの多くのプロファイル ツールも提供されていますが、これらのツールによって提供される結果はあまり読みにくく、どの関数または行が最も時間を費やしているかを一目で確認できるほど直観的ではありません。 python line_profiler はこのような機能を提供します どの行に最も時間がかかっているかが直感的に分かります 「速くて正確で容赦がない」と言えます ダウンロードアドレス: http://pythonhosted.org/line_profiler/
line_profiler をインストールした後、最後に、C:\Python27\Lib\site-packages ディレクトリに kernprof.py が作成されます。次の例のように、ボトルネックがある可能性のある関数に @profile を追加します。 ##このファイル kernprof.py -l -v D:\project\mp\src\protocols\libdiametermt.py を実行すると、次の結果が得られます。この図から、setAVPS メソッドが時間の 96.6% を占めていることが直感的にわかります。次に、この関数を見つけて @proflie 修飾子を再度追加します (プロファイルは一度に複数の関数に追加できます)。さらに setAVPS の比率を確認できます。関数内のコードの各行にかかる時間。
ステップバイステップの分析を通じて、オープンソースのプロトコル ライブラリの setAVPS メソッドで、 find avp の属性が次から検索されていることがわかります。 3000 のループでは、各 AVP を 3000 回サイクルする必要があり、Diameter メッセージには少なくとも 10 avp があり、エンコードのたびに avp を 30,000 回サイクルする必要があります。私たちの最初の解決策は、パフォーマンス テストで使用されなかった多くの AVPS を削除することでした (方法はありません。テスト開発リソースは限られており、適切な設計がない場合が多いため、まずニーズを満たすものを作成します)。改善されました 約 150 ですが、需要にはまだ程遠いです。そこで、AVP を辞書モードに変更して、名前に基づいて AVP の属性をすぐに見つけられるようにしました。
コードの最適化に加えて、エンコード AVP スレッドの数も増加します。次の章では、マルチスレッドとマルチプロセスがパフォーマンスに与える影響について説明します。つづく。 。 。 。
[おすすめコース:
Python ビデオコース以上がPython を使用して高性能テスト ツールを実装する (2)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。