2011-10-04 19 views
7

私はDjangoを使ってウェブサイトを運営しています。ほとんどすべてのスクリプトの始めにipdbをインポートして、デバッグを簡単にしています。しかし、私がモジュールから関数を使用することはほとんどありません(私がデバッグしているときのみ)。モジュールをインポートする(使用しない)と、Pythonのパフォーマンスが低下しますか?

これは私のパフォーマンスを低下させるでしょうか?対照的に、

ipdb.set_trace() 

import ipdb; ipdb.set_trace() 

しかし、私は、私は思ってしまういくつかの場所で行われ第二の例を、見てきた私は、ブレークポイントを作成したいときに私は書くことを好むだけのことですもし効率が良いのであれば...

私はPythonモジュールのインポートが効率にどのように関係しているか分かりません(あなたのスクリプト内でモジュールメソッドを使用していないと仮定して)。

答えて

4

@wARARと同様に、モジュールをロードすると、時間がかかるコード量を実行することがあります。一方、モジュールは一度だけロードされ、それ以降のインポートの試行では、モジュールはos.sys.modulesにあり、それを参照しています。モードのデバッグのでDjangoの環境では

は、モジュールはDjangoのAppCacheから削除され、実際にあなたのケースでは、それは問題ではありませんので、彼らは、あなたはおそらくipdbではできないであろう、変更された場合にのみ、再インポート。

しかし、それが問題になる場合は、その周りにいくつかの方法があります。

# much used module: mymodule 
def set_trace(): 
    import ipdb 
    ipdb.set_trace() 

あなたがipdb.set_traceを使用するモジュールに:あなたは、あなたがそれを必要と輸入ipdb場合にのみ、ということに機能を追加することができ、あなたはとにかくロードするために使用するカスタムモジュールがあるとし

import mymodule 

mymodule.set_trace() 

や、あなたのモジュールの上に、クロスモジュール__debug__変数を使用します。

if __debug__: 
    from ipdp import set_trace 
else: 
    def set_trace(): return 
+0

モジュールをインポートすると(それを使用していない)、Pythonのパフォーマンスが低下しますか?それは質問です – joaquin

+1

確かに@ジョイキン、私はあなたがあなたのコメントを書いたとき、私は上記の編集の過程にあった;)。いくつかは同意しないかもしれませんが、これは質問に興味を持つ問題解決指向のアドバイスを提供するのにも最適な場所です。 – Remi

+0

ありがとう!実用的な例が分かりました。 =) –

2

短い答え:ない通常

長い答え:

これは、モジュールをロードするには時間がかかります。これは、ネットワークドライブやその他の低速ソースからPythonをロードしている場合に顕著です。しかし、ハードドライブから直接走っていると気付かないでしょう。

@wRarが指摘しているように、モジュールをインポートすると、任意の量のコードを実行できます。モジュールの起動時に実行するコードは自由に設定できます。しかし、ほとんどのモジュールでは、起動時に不当な量のコードを実行することはありません。だからそれ自体はおそらく大きな原因ではない。

しかし、非常に大きなモジュール、特に多数のcモジュールをインポートする結果を招くモジュールをインポートするには時間がかかります。

インポートには時間がかかりますが、モジュールを1回インポートするだけです。あなたが(関数ではなく)あなたのモジュールの上にモジュールをインポートする場合、起動時にとにかく適用されます。基本的には、モジュールをインポートすることを避けるために、最適化のための多くのマイルを獲得するつもりはありません。

+0

@JBernardo:あなたはそうだと気がついていますし、 'scipy'はまだかなり遅いので、通常は実際に使用している関数をインポートします(' scipy import foo、bar、spam'から) – heltonbiker

+1

Loadingモジュールは、任意の量の時間を取ることができるコードの量を実行することを意味することができる。 – wRAR

+0

@wARAR、あなたは正しいです。 –

0

それを使用して、モジュールのインポートではなくをdecre AS(システム)の性能:

  1. それは
  2. インポートモジュールは、最初のポイントは、起動するプログラムが遅くなりますが、第二の点が作るかもしれないメモリ

を使い切るモジュールをインポートするには時間がかかりますすべてのプログラムは、システムに搭載されているメモリの総量に応じて、処理速度が低下します。

関連する問題