I.はじめに
プログラムのパフォーマンスも非常に重要な指標です。多くの場合、コードの実行速度が速くなり、テクノロジーをより適切に反映できます。最近、多くの小規模なパートナーが、実行時間を手動で印刷する方法を使用して、パフォーマンス分析のプロセスで時間のかかるコードをカウントしていることがわかりました。
import datetime
start=datetime.datetime.now()
b=[i for i in range(10000000)] # 生成长度为一千万的列表
end=datetime.datetime.now()
print(end-start)
出力結果
0:00:00.377766
この方法は非常に高速に使用できますが、コードの各行の実行時間をカウントし、視覚的なレポートなどのより完全なパフォーマンス分析を生成する必要がある場合は、少し無力です。現時点では、PythonのサードパーティライブラリPyinstrument
をパフォーマンス分析に使用できます。
記事ディレクトリ
2.Pyinstrumentの使用
PyinstrumentはPythonアナライザーです。プロファイラーは、コードを最適化するのに役立つツールです。コードを高速化します。最大速度ブーストを取得します。
Pyinstrumentの公式ドキュメント:pyinstrument
Pyinstrumentのインストール:
pip install pyinstrument
1.例
最初に示した例では、Pyinstrumentを使用して実装されたコードは次のとおりです。
文末添加个人VX,获取资料和免费答疑
from pyinstrument import Profiler
profiler=Profiler()
profiler.start()
b=[i for i in range(10000000)]# 生成长度为一千万的列表
profiler.stop()
profiler.print()
出力結果
_ ._ __/__ _ _ _ _ _/_ Recorded: 10:39:54 Samples: 1
/_//_/// /_\ / //_// / //_'/ // Duration: 0.385 CPU time: 0.391
/ _/ v4.1.1
Program: D:/code/server/aitestdemo/test2.py
0.385 <module> test2.py:2 #执行总耗时
└─ 0.385 <listcomp> test2.py:7 #单行代码耗时
印刷される情報には、記録時間、スレッド数、合計時間、1行のコード時間、CPU実行時間などの情報が含まれます。
複数行のコード分析の場合の使用の効果(それぞれ、1,000万の長さ、1億の長さ、および2億の長さのリストを生成するのに時間がかかります):
from pyinstrument import Profiler
profiler = Profiler()
profiler.start()
a = [i for i in range(10000000)] # 生成长度为一千万的列表
b = [i for i in range(100000000)] # 生成长度为一亿的列表
c = [i for i in range(200000000)] # 生成长度为十亿的列表
profiler.stop()
profiler.print()
出力結果
Program: D:/code/server/aitestdemo/test2.py
16.686 <module> test2.py:1
├─ 12.178 <listcomp> test2.py:9
├─ 4.147 <listcomp> test2.py:8
└─ 0.358 <listcomp> test2.py:7
2.Pyinstrumentはdjangoコードを分析します
Pyinstrumentを使用してDjangoコードを分析するのは非常に簡単です。次の構成を、Django構成ファイルに追加するだけです。settings.py
MIDDLEWARE
MIDDLEWARE = [
...
'pyinstrument.middleware.ProfilerMiddleware',
...
]
次に、URLにパラメータプロファイルを追加できます。
Pyinstrumentは、フラスコと非同期コードのパフォーマンス分析もサポートしています。詳細については、学習用の公式ドキュメントを確認してください。
Pyinstrumentには、使用できる豊富なAPIも用意されており、公式Webサイトのドキュメントに詳細な紹介があります:https ://pyinstrument.readthedocs.io/en/latest/reference.html
3. PyinstrumentとcProfile(Python独自のパフォーマンスアナライザー)の違い
公式ドキュメントの説明によると、PyinstrumentのシステムオーバーヘッドはcProfileなどのトレースアナライザーのオーバーヘッドよりもはるかに小さく、プロファイラーへの多数の呼び出しによりテスト結果が歪む可能性があります。