13

cProfiler (主に時間測定用) と、ここで見つけたメモリ プロファイラーの両方を実行したいと考えています。ただし、どちらも -m コマンドライン引数を指定する必要があり、これはうまく動作しません。

両方を実行する方法はありますか?私がこれまでにできたのは、通訳に怒鳴られただけです。

さらに情報が必要な場合はお知らせください。提供できるよう最善を尽くします。前もって感謝します!

4

2 に答える 2

7

-m2 つの引数を使用して 2 つのモジュールを開始することはできません。これは、以降のコマンド ライン引数-mがすべて名前付きモジュールに as として与えられるためsys.argvです。これはドキュメントでは明示的に説明されていませんが、実験的に試すことができます。

2 つの python ファイルa.pyb.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 番目のモジュールが-mpython によって処理されないためです。モジュール a に渡されて処理されます。

于 2012-11-19T15:02:49.140 に答える
0

同じファイルで 2 つの -m 引数を使用できないことは明らかですが、何とか解決策をまとめることができました。ただし、それは少し回りくどく、正確には完璧ではありません。ここで見ることができる 2 つの .bat ファイルを使用しました。左側は cProfiler を処理する .bat で、右側はメモリ プロファイラーを処理する .bat です。

メモリ プロファイラを処理する .bat で見られる Python プログラムのコードは、こちらここで見ることができます。

最初のプログラムは、メイン コードhereの関数のすぐ上の行に # を追加します。これは、プログラムを実際に実行でき、cProfiler がそのことを実行できることを意味します。

2 番目のプログラムはその # を削除します。これは、メモリ プロファイラーが機能することを意味します。

このシステムが私のレイアウトで適切に機能するには、最初に「@profile」をコメントアウトする必要があります。

これは少し面倒で、さらに自動化するためにいくつかの改良を使用できます (メモリ プロファイラーを処理する .bat ファイルでファイルの名前を指定する必要があるなど) が、今のところはそれで十分です。かなり特殊なケースだとは思いますが、誰かが私とまったく同じ立場にいるのかもしれません...

于 2012-11-19T21:45:17.300 に答える