2

私のコードの約 25% は、Traits、tvtk などのモジュールに依存しています。これらはインポートするのが非常に重いです。通常、私のマシンでは2秒ほどかかります(他のマシンではさらに長くなります)。

私のモジュールは次のように編成されています

mainmodule
|--submodule1
|--submodule2
   |--subsubmodule1
   |--subsubmodule2
|--submodule3
|--submodule4
   |--subsubmodule1
   |--subsubmodule2

これらの submodule1 と submodule2 は Traits を使用します。つまり、75% の確率でimport mainmoduleを呼び出すと、重いモジュールがインポートされるのを待つ必要がありますが、その後は使用されません。

インポート時間を短縮できるように、インポートを整理するにはどうすればよいですか?

たぶん、次のような方法があります。

import mainmodule

そして持っている

mainmodule
|--submodule3
|--submodule4
   |--subsubmodule1
   |--subsubmodule2

そして、以下を呼び出すだけです:

import mainmodule.heavy

すべてを持つこと

4

2 に答える 2

3

関数/モジュール内にこのようなコードを入れることができます:-

def heavy():
    global x
    global y
    import x, y

def mainmodule():
    if heavy not in globals():
        import heavy

実際には、関数をインポートできないため、これは同じプログラム内では機能しません。また、モジュール自体ではなく、グローバル内の文字列を確認する必要があります。だから、代わりに: -

def heavy():
    global x
    global y
    import x, y

def mainmodule():
    if 'x' not in globals() or 'y' not in globals():
        heavy()
于 2011-01-07T23:42:39.010 に答える
3

あなたが望むのは、読み込みに時間がかかるとをmainmodule自動的にインポートしないようにする方法のようです。submodule1submodule2

実際、それはとても簡単です。それらを必要とする関数でのみsubmodule1インポートできます。submodule2または、これらの機能を という別のモジュールに移動しますmainmodule_heavy.py

(または、Python モジュール システムをハックしてモジュールを遅延ロードすることもできます。しかし、そのようなハックは問題を引き起こす傾向があり、あなたの場合には不要に思えます。)

于 2011-01-08T00:19:46.393 に答える