問題の説明
1、Pythonの開発プログラムは、比較的遅いものコードを決定するために、使用中に遅いです。
2、引き起こされるコードの決定と同様に、大型の過程で開発されたプログラムのためのPythonメモリと
ソリューション
プロファイル分析のCPU使用率を使用します
cProfileパイソン及び分析手順、メインレコードcProfileの使用、基準プロファイルできcProfileをプロファイルするために使用することができます。
考えてみましょう次のコードは、(cProfileTest1.py)を分析する必要があります
#!/ usr / binに/のenvのpython #- * -コーディング:UTF-8 - * - デフのfoo(): 和 = 0 用のI における範囲(100 )。 合計 + = 私は 返す合計を もし __name__ == " __main__ " : FOO()
それは、2つの方法で分析することができます。
1、プログラムを変更しないでください
分析手順:
python -m cProfile -o test1.out cProfileTest1.py
結果を見ます:
Pythonの-c " インポートpstats; P = pstats.Stats( 'test1.out'); p.print_stats()"
ビューを実行した後にソート結果:
Pythonの-c " インポートpstats; P = pstats.Stats( 'test1.out'); p.sort_stats( '時間')print_stats()。"
2、プログラムを変更
次のコードを追加:
#!/ usr / binに/のenvのpython #- * -コーディング:UTF-8 - * - デフのfoo(): 和 = 0 用のI における範囲(100 )。 合計 + = 私は 返す合計を もし __name__ == " __main__ " : 輸入cProfile cProfile.run(" FOO()" ) 終了(0)
次のように業績は以下のとおりです。
標準名:によって命じ ncalls tottime percall cumtime percallファイル名:LINENO(機能) 1 0.000 0.000 0.000 0.000 <ストリング>:1(<モジュール> ) 1 0.000 0.000 0.000 0.000 cProfileTest2.py:4 (FOO) {方法1 0.000 0.000 0.000 0.000 ' 無効'の' _lsprof.Profiler ' オブジェクト} 1 0.000 0.000 0.000 0.000 {範囲}
結果はそれを示しています。
「」「 ncalls:関数は、呼び出しの数です tottime:総走行時間機能、関数呼び出しを除去するための時間の関数 percall:関数が実行平均時間、等しいtottime / ncalls cumtime:総走行時間機能、実行時の関数呼び出しを含みます percall:関数が実行平均時間、等しいcumtime / ncalls ファイル名:名前LINENO(機能)関数の関数の行番号、関数名 「『』
メモリの使用状況を分析memory_profiler使用
あなたはmemory_profilerをインストールする必要があります
psutilをインストールするPIP
memory_profilerをインストールするPIP
次のコードを分析する必要があります考えてみましょう:
デフmy_func(): A = [1] *(10 * 6 ) B = [2] *(10 * 7 ) デルBの 戻り A
Memory_profilerはどこ以下の2つの方法で記録するために使用されるコードを変更する必要があります。
1、モジュールをインポートしていません
#!/ usr / binに/のenvのpython #- * -コーディング:UTF-8 - * - #の使用:のpython -m memory_profiler test1.py @プロフィール デフmy_func(): A = [1] *(10 * 6 ) B = [2] *(10 * 7 ) デルBの 戻り A もし __name__ == " __main__ " : my_func()
プロファイル分析:
python -m memory_profiler test1.py
2、インポートモジュール
memory_profiler インポートプロフィール @プロフィール デフmy_func(): A = [1] *(10 * 6 ) B = [2] *(10 * 7 ) デルBの 戻り A
次のように完全なコードは次のとおりです。
これは、分析のために直接プログラムを実行することができます。
次のように業績は以下のとおりです。
(py27env)[マイク@ローカルテスト] $パイソンtest1.py ファイル名:test1.py ライン# メモリ使用量インクリメント行内容 ================================================ 6 29.5のMIB 0.0 のMIB @profile 7 DEF :my_func() 8 29.5のMIB 0.0のMIB A = [1] *(10 * 6 ) 9 29.5のMIB 0.0のMIB B = [2] *(10 * 7 ) 10 29.5のMIB 0.0のMIB デルB 11 29.5のMIB 0.0 MIB 返します