2

fsdataモジュールレベルで呼び出される辞書があります(グローバル変数のように)。

コンテンツはファイル システムから読み取られます。最初のアクセスで一度データをロードする必要があります。これまでは、モジュールのインポート中にデータをロードしていました。これは最適化する必要があります。

コードがアクセスしない場合fsdata、コンテンツはファイル システムから読み取られません (CPU/IO を節約します)。

ブール値も確認すると、読み込みが発生するはずです。

if mymodule.fsdata:
    ... do_something()

更新: 一部のコードは既に mymodule.fsdata を使用しています。他の場所は変えたくない。関数ではなく、変数にする必要があります。また、「mymodule」は、すでに多くのコードで使用されているため、モジュールである必要があります。

4

3 に答える 3

3

このように Future/Promise を使用する必要があると思いますhttps://gist.github.com/2935416

要点 - オブジェクトを作成するのではなく、オブジェクトのように動作するオブジェクトに関する「約束」を作成します。

于 2012-06-15T08:34:53.470 に答える
2

objectモジュールを記述子セマンティクスを持つに置き換えることができます。

class FooModule(object):
    @property
    def bar(self):
        print "get"
import sys
sys.modules[__name__] = FooModule()

パッケージ化されたアプローチについては、http://pypi.python.org/pypi/apipkgをご覧ください。

于 2012-06-15T08:44:15.827 に答える
1

データを記憶する単純な関数を作成できます。

fsdata = []

def get_fsdata:
    if not fsdata:
        fsdata.append(load_fsdata_from_file())
    return fsdata[0]

(グローバルキーワードをいじらずに変数をグローバルにする簡単な方法であるため、リストを使用しています)。

を参照する代わりに、 をmodule.fsdata呼び出すことができますmodule.get_fsdata()

于 2012-06-15T08:35:26.897 に答える