2011-01-07 217 views
2

我的代碼大約有25%取決於模塊:特徵,tvtk,...這是非常重的導入。我的機器上通常需要2秒鐘的時間(以及其他時間)。組織重蟒蛇進口

我的模式組織的,如下面的

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

在這些中,submodule1和submodule2使用特點。這意味着75%的時間,如果我打電話進口主模塊,我將不得不等待沉重的模塊進口,但他們不會被使用。

如何組織我的進口,以便降低進口時間?

也許有一種方法可以這樣做:

import mainmodule 

,並有

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

和來電:

import mainmodule.heavy 

擁有一切

+3

什麼?這是非常不清楚你問的。 – Falmarri 2011-01-07 23:35:00

回答

3

這聽起來像你想要的是一種方式,以使進口mainmodule不會自動導入submodule1submodule2,這需要很長的時間來加載。

實際上這很容易。只能在需要它們的功能中輸入submodule1submodule2。或者將這些功能移動到名爲mainmodule_heavy.py的單獨模塊中。

(或者你可以hack the Python module system to load modules lazily,但那種黑客往往會造成問題,併爲你的情況聽起來是不必要的。)

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()