2014-01-10 13 views
23

MacOSX Xcode Instrumentsは、ネイティブコードのプロファイリングには本当に適しています。しかし、私はコールスタックでPython呼び出しの膨大な部分を持っています。インストゥルメントをどうにかしてPython対応にすることはできますか?MacOSX Pythonコードをプロファイリングする機器

私が考えることができる1つの解決策は、いくつかのPython呼び出しを分離し、いくつかの呼び出し情報を表示するローカル変数/パラメータを調べるフレームを参照しているときです。

私は単なるPythonプロファイラについては問いません。自分のネイティブコードをプロファイルしたいしかし、このネイティブコードプロファイリングでは、Pythonスタックフレームを分析して翻訳するために、さらにインテリジェンスを追加したいと考えています。

+2

[RunSnakeRun](http://www.vrplumber.com/programming/runsnakerun/)を試してみましたか?私は個人的にそれを使用したことはありませんが、あなたが探しているもののようです。 – KronoS

+0

@KronoS:私は、cProfileとKCacheGrindへの輸出業者に似た解決策を見てきたと思います。しかし、(1)ネイティブCコードのプロファイル、つまり両方を組み合わせたものも見たいと思います。 (2)私はまたespしたいです。 Xcode Instrumentsを使用してください。 – Albert

+1

私はあなたが尋ねていることを十分に理解していないかもしれませんが、 'python -m cProfile myscript.py'を使ってスクリプトを実行できるのでしょうか?次に出力をログファイルに保存することができます – ollien

答えて

-1

PythonコードをプロファイリングするMacOSX計測器はありません。 個人的には、私はcProfileを使用します。その内部プロファイラはcProfileと呼ばれています。あなたは、以下のいずれかの方法でそれを使用することができます。

import cProfile 
cProfile.run('print "Hello World!"') 

または

python -m cProfile your_own_script.py 

結果はのようになります。あなたはネイティブレベルの呼び出しを探している場合:

>>> cProfile.run('print "Hello World!"') 
Hello World! 
     2 function calls in 0.000 seconds 

    Ordered by: standard name 

    ncalls tottime percall cumtime percall filename:lineno(function) 
     1 0.000 0.000 0.000 0.000 <string>:1(<module>) 
     1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects} 

編集。次に、strace(Linuxの場合)とdtruss(Mac OSXの場合)またはそのような他のツールに移動する必要があります。基本的には、straceコールでPythonスクリプトをラップすることができ、すべての "ネイティブ" C/C++コールを表示することができます。他のLinuxシステム用 は使用:

strace -fetrace=open python your_script.py 

かは、Mac OSX上にある場合:

dtruss -f -t open python your_script.py 

私はこれが役に立てば幸い!

+0

それは問題ではありません。質問はネイティブコードに関するものです。 – Albert

+0

ネイティブレベルの通話を探している場合。それでは、 'strace'やそのようなツールに移動してください。基本的にはPythonスクリプトを 'strace'呼び出しでラップすることができ、あなたはあなたの"ネイティブ "なC/C++呼び出しをすべて見ることができます。 – tricklepie

+0

それでは、 'strace'でPythonがどのように呼び出すのでしょうか?私は 'PyEval_EvalFrameEx'などを見たいだけではなく、実際のP​​ython関数を見たいと思っています。 (また、「strace」については尋ねませんでしたが、MacOSX Instrumentsについてはそれほど重要ではありません) – Albert

0

PyVmMonitorという素晴らしい新しいGUIプロファイラがあります。私は成功し、それはまだ私の実行中のアプリに接続するようになっていないが、私はこのようなコマンドラインからプロファイルを生成し、分析するために、それを使用してきた:

python /Applications/PyVmMonitor.app/Contents/MacOS/public_api/pyvmmonitor --profile=yappi my_app.py 
1

このstackoverflow answerによると、楽器はGUIですフロントエンドをdtraceに設定します。 Apple Documentationと、他の場所の中ではdtraceのBig Nerd RanchにあるOS-X固有の記事があります。

patchesがあり、dtrace用にコンパイルする前にCPythonソースに適用できます。 homebrewにdtraceを使って新しいPythonを自動的にビルドするサポートがあるようだが、私は今現在、私は現在のPythonリリース(2.7.10,3.4/3.5)。私は試していないので、現状のレシピは、建物のスイッチを--with-dtraceと一緒に使っているだけかもしれません。

pytexas 2013:dtrace, Python and Youから、dtraceサポート(特にMacでのデモンストレーション)を含むPythonインストールを取得し、コマンドラインでdtraceを使用する方法について説明しています。

dtraceサポートがインストールされているPythonを実行したら、それを実行する際に、Instrumentsで表示して使用できるはずです。 PythonインタプリタをOS Xアプリケーションに追加している場合は(。フレームワーク、または他の形式のリンク)、もしPythonがコンパイル前にdtraceパッチを適用していたら、dtraceで動作するようになると思います。私はどちらも試してみませんでしたが、dtraceについて知っていれば、うまくいくはずです。もしこれが正しいと確信すれば、私は返信します。