cProfiler (主に時間測定用) と、ここで見つけたメモリ プロファイラーの両方を実行したいと考えています。ただし、どちらも -m コマンドライン引数を指定する必要があり、これはうまく動作しません。
両方を実行する方法はありますか?私がこれまでにできたのは、通訳に怒鳴られただけです。
さらに情報が必要な場合はお知らせください。提供できるよう最善を尽くします。前もって感謝します!
cProfiler (主に時間測定用) と、ここで見つけたメモリ プロファイラーの両方を実行したいと考えています。ただし、どちらも -m コマンドライン引数を指定する必要があり、これはうまく動作しません。
両方を実行する方法はありますか?私がこれまでにできたのは、通訳に怒鳴られただけです。
さらに情報が必要な場合はお知らせください。提供できるよう最善を尽くします。前もって感謝します!
-m
2 つの引数を使用して 2 つのモジュールを開始することはできません。これは、以降のコマンド ライン引数-m
がすべて名前付きモジュールに as として与えられるためsys.argv
です。これはドキュメントでは明示的に説明されていませんが、実験的に試すことができます。
2 つの python ファイルa.py
とb.py
.
の内容a.py
:
print 'a'
import sys
print sys.argv
の内容b.py
:
print 'b'
-m
次に、2 つの引数を使用して両方を実行してみます。
$ python -m a -m b
出力:
a
['/home/lesmana/tmp/a.py', '-m', 'b']
ご覧のとおり、モジュール b は開始されません。これは、2 番目のモジュールが-m
python によって処理されないためです。モジュール a に渡されて処理されます。
同じファイルで 2 つの -m 引数を使用できないことは明らかですが、何とか解決策をまとめることができました。ただし、それは少し回りくどく、正確には完璧ではありません。ここで見ることができる 2 つの .bat ファイルを使用しました。左側は cProfiler を処理する .bat で、右側はメモリ プロファイラーを処理する .bat です。
メモリ プロファイラを処理する .bat で見られる Python プログラムのコードは、こちらとここで見ることができます。
最初のプログラムは、メイン コードhereの関数のすぐ上の行に # を追加します。これは、プログラムを実際に実行でき、cProfiler がそのことを実行できることを意味します。
2 番目のプログラムはその # を削除します。これは、メモリ プロファイラーが機能することを意味します。
このシステムが私のレイアウトで適切に機能するには、最初に「@profile」をコメントアウトする必要があります。
これは少し面倒で、さらに自動化するためにいくつかの改良を使用できます (メモリ プロファイラーを処理する .bat ファイルでファイルの名前を指定する必要があるなど) が、今のところはそれで十分です。かなり特殊なケースだとは思いますが、誰かが私とまったく同じ立場にいるのかもしれません...