2016-06-15 18 views
1

私はpythonには新しく、私はpprofileを使いたいですが、動かすことはありません。なぜpprofileは出力を出さないのですか?

#!/usr/bin/env sc_python3 
# coding=utf-8 

import time 
import pprofile 

def someHotSpotCallable(): 
    profiler = pprofile.Profile() 
    with profiler: 
     time.sleep(2) 
     time.sleep(1) 
    profiler.print_stats() 

実行:次のスクリプトを使用して、https://github.com/vpelletier/pprofile:例えば

#pprofile --threads 0 test.py 

は、私がここで説明するように、モジュールとしてpprofiler実行しようとしました

bash: pprofile: Command not found. 

エラーになりますこのスクリプトは出力しません。次のよう

#!/usr/bin/env sc_python3 
# coding=utf-8 

import time 
import pprofile 

def someHotSpotCallable(): 
    profiler = pprofile.Profile() 
    with profiler: 
     time.sleep(2) 
     time.sleep(1) 
    profiler.print_stats() 

print(someHotSpotCallable()) 

でスクリプトを変更すると、出力に

Total duration: 3.00326s 
None 

を与える方法https://github.com/vpelletier/pprofileに示され、私はライン・バイ・ライン表出力を得るデュ?

私はPython 3.4.3を使用しています。バージョン2.7.3は、私のシステムで同じ出力(合計持続時間のみ)を与えています。

何かインストールする必要はありますか?

ありがとうございます!

答えて

2

ここにpprofile authorがあります。

pprofileをコマンドとして使用するには、インストールする必要があります。今まで私が取り組んできた唯一のパッケージはvia pypiです。あなたが最も簡単なセットアップにおそらくvirtualenvで、その中にpprofileをインストールし、(ビルドアウトのような)依存収集ツールを使用していない場合:

$path_to_your_virtualenv/bin/pip install pprofile 

このほかに、インストールするために他に何もありません:pprofileは唯一のpythonに依存します通訳の機能(これについては以下をご覧ください)。 そして、あなたが好きそれを実行することができます:pprofileを実行するための

$path_to_your_virtualenv/bin/pprofile <args> 

もう一つの方法は、ソースを取得し、Pythonスクリプトとしてではなく、standa単独のコマンドとして実行することです:

$your_python_interpreter $path_to_pprofile/pprofile.py <args> 

その後、驚くべき成果について:私はあなたのシバンが通訳者として「sc_python3」を言及していることに気付きました。これはPythonインタプリタの実装ですか?インタプリタの起動時にいくつかの非標準モジュールが読み込まれますか?

確定モードのpprofileは、関数が呼び出されるたびに、または返されるたびにspecial eventsをトリガーするインタプリタに依存し、完全性を保つために、スレッドがトレースとして作成されるときを監視します関数はスレッドローカルです。インタプリタがこれらのイベントを引き起こさないようです。可能性のある説明は、これらのイベントのために他のものがpprofileと競合していることです。一度に1つの関数しか登録できません。たとえば、コードカバレッジツールやデバッガは、この関数(または標準のsysモジュールの別の密接に関連するもの、setprofile)を使用することができます。完全性のために、setprofileはpprofileには不十分でした。これは、関数呼び出し/戻り時にイベントをトリガするだけなので。

pprofileは別のインタープリタ機能に依存する必要がありますが、正確性を犠牲にして(ただしプロファイラのオーバーヘッドは極端に少なくても)、統計プロファイリングモードを試してみることをお勧めします。call stack of all running threadsを悲しいsysモジュールの標準の他の機能よりも移植性が低いと予想されます。

CPython 2.xCPython 3.xpypyのすべてのこれらの作業罰金と(それが貢献してきたが、私はそれを自分でテストしていない)IronPython

+0

ありがとうございました!あなたのプロファイラは非常にうまくいっています – PyNoob

関連する問題