2010-12-01 18 views
0

私はそこに多くのモジュールを持つ大きなプロジェクトを持っていて、その上でいくつかのプロファイリングを実行したいと思います。私は基本的には、それが呼び出されたときにプロファイリングするための関数に追加できるデコレータを提供するプロファイルモジュールを持っています。pythonモジュールのインポートの質問

問題は、私が持っているモジュールの数十にそのモジュールをインポートする必要があるということです。これはうまくいきますが、インポートされたプロファイリングモジュールまたは関数のデコレータをバージョンコントロールにプッシュすることはできません。これは、インポート/エクスポートを行うたびに、すべてのプロファイリングコードを追加/削除する必要があることを意味します。

私のプロジェクトのすべてのモジュールでモジュールを手動でインポート/削除せずにプロファイリングコードの追加/削除を管理するシステムはありますか?私たちは水銀を使用しますが、私は実際に水銀の設定を混乱させたり、支店を作ることはできません。

答えて

2

あなたはそれがあなたの他のモジュールをインポートし、その機能注釈を付け、そのようなことを、あなたのプロファイリングモジュールを作成することができます。

# these are the modules you want to profile 
import foo 
import huh 

# This is a profiling function 
# yours would do something smarter 
def profile(f): 
    def gotcha(*args, **kwds): 
     print "before" 
     result = f(*args, **kwds) 
     print "after" 
     return result 
    return gotcha 

# these are the functions in those modules that you 
# want to profile. Each one is patched here instead 
# of decorated there. 
foo.bar = profile(foo.bar) 
huh.baz = profile(huh.baz) 
huh.hmm = profile(huh.hmm) 

あなたはこれらのモジュールを変更する必要はありません。この方法は、しかし、あなたは、このプロファイリングモジュールをインポートすることを選択した場合実行時にどこでも、それはあなたが望むように他のモジュールをすべて "パッチ"します

同様にクラスメソッドを飾ることができるはずです。

+0

うわー、それは素晴らしい考えです。私は間違いなくこれを試してみると思います – Falmarri

+0

@Falmarri、お手伝いをして幸いです:-) – xscott

+0

作品は完璧です] – Falmarri

0

プロファイリングの変更がすべて含まれているブランチを作成し、テストしたいときにブランチをマージし、その後すべてを元に戻すのはなぜでしょうか?

gitはこれを "git stash"でやや簡単にしますが、ブランチを使用するのはそれほど難しくありません。

+0

私はそれを考えました。しかし、たぶんそれは私がそれをするのに疲れている以上プッシュして引っ張る以上の何かをするたびに水銀のレポをゴミ箱に入れる傾向があるからです。_ < – Falmarri

関連する問題