2015-10-03 16 views
6

私は比較的複雑なPythonプログラムを実行しています。その中にはほとんどの時間を費やすモンテカルロシミュレーションがあります。そのうちのどの部分が最も多くのリソースを使用しているかを知りたいので、潜在的にそれをより速くすることができます。PyCharm(または他のIDE)を使ったPythonプログラムのプロファイリング

私はPyCharm Professionalエディションを使用していて、プロファイラを使用しようとしましたが、これまでに聞いたことのない無関係な関数の大きなリストだけです。

質問:モンテカルロシミュレーションでどの機能やキーワードが最も多くのリソースを使用しているのかわかりますが、意味のある結果をもたらす良いプロファイラがありますか?

+1

[* this *](http://stackoverflow.com/a/4299378/23771)を試すことなく、非常に長く行ってはいけません。それは何も費用がかからず、驚くほど効果的です。 –

答えて

6

ニーズやPythonのバージョンによっては、hotshotのようなものを使いたいかもしれません。 https://docs.python.org/2/library/hotshot.html

EDITます:python 3.4の場合

はcProfileは、おそらくあなたが利用可能な1つの最善の選択肢ですが、あなたは間違いなく、特にあなたの場合は関連性の高い結果を得ることができるようにするためにはgrep/sedの/はawkで結果をフィルタリングする必要があります多くの内部呼び出しが発生している場所でインポートされたライブラリを使用します。

私はコール数でソート好き: python -m cProfile -s 'calls' <your_program>.py

今その方法とのpython3での問題は、cProfileが外部から呼び出された場合に表示されますプリミティブコール数であるので、内部的にそれを実行すると、おそらく良いですアイデア:

import cProfile 

pr = cProfile.Profile() 
pr.enable() 
your_function_call() 
pr.disable() 
# after your program ends 
pr.print_stats(sort="calls") 
+0

私はPython 3.4を使用しています。 – Nickpick

+0

私はPython3の答えを編集しました。 – shafeen

3

注:コメントで述べたように、次のことがPyCharmの有料版に適用されます。3.xを使用している場合

(2.xのことは知らない)、I'LL shafeeに追加元の投稿ごとにPyCharm固有のものを作成してください。これは、Webアプリケーションや大規模なアプリケーションと比較して、出力をstdoutに出力しても大丈夫かもしれない単純なコマンドラインプログラム(PyCharmのビューアでさまざまな方法を並べ替えることができる方が良い)でも効果的です。

実際には、プロファイルをインスタンス化し、必要に応じて有効化と無効化を行うことで示唆されるようにします。これを有効にするには、これをファイルに保存します。

  • コードの外側のセクションで、プロファイルをインスタンス化します。
  • コードの内側のセクションで、プロファイリングを行います。
  • さて、あなたは今、あなたは検討したいプロファイルファイルを持っている( 'profile.pstat')

pr.dump_statsを呼び出します。 [ツール] | [CProfileスナップショットを開く]に移動します。 profile.pstatを選択すると、必要に応じてさまざまな見出しで表示およびソートできます。

概要

import cProfile as profile 

# In outer section of code 
pr = profile.Profile() 
pr.disable() 

# In section you want to profile 
pr.enable() 
# code of interest 
pr.disable() 

# Back in outer section of code 
pr.dump_stats('profile.pstat') 

PyCharmのCProfileビューアでファイルを開きます。

+2

残念ながら、ProfilerプラグインはPyCharmのProfessional(非フリー)版です。 – user1735003

関連する問題