0

data.py と interpret.py の 2 つのファイルがあります。

data.py:

X = cPickle.load(open("X","r"))

解釈.py:

from data import X
query = raw_input("Enter query")

#do something with query and X

非常に巨大なオブジェクトX。cPickle を使用してダンプしました。interpret.py は別のプログラムによって呼び出され、現在の import の動作方法により、interpret.py が実行されるたびに、X をロードする data.py がロードされます。X は非常に大きいため、多くの時間がかかります。

このようなことができるようになりたいです。

data.py:

from time import sleep
X = cPickle.load(open("X","r"))
sleep(10**10) #Sleep for eternity

そして data.py を実行します

解釈.py:

from data import X #import from live instance of data.py
                   #don't load X all over again
query = raw_input("Enter query")

#do something with query and X

これどうやってするの?ライブ インスタンスからインポートできない場合、やりたいことを実行する代替手段はありますか。うまくコミュニケーションが取れていません。理解できない部分を教えてください。さらに明確にするよう努めます。

4

2 に答える 2

1

私が言えることから、デーモンを実行したいと思っています。たとえば、解釈からデータをインポートする代わりに、データは、解釈がソケットのようなものを介して通信するスタンドアロンのデーモンとして実行されます。

しかし、この時点で、基本的にデータベースを作成したので、持っているデータを何らかのデータベースに変換して、データベースと通信するだけでいいのではないでしょうか?

編集:問題は、巨大なオブジェクトをプロセス間で保持したいということですが、そのように機能することはできません。intepret を呼び出すたびに、新しいプロセスが生成されます。これは、前のプロセスによって生成されたオブジェクトへのアクセスがないことを意味します。そのため、デーモン (およびデータベース) が存在します。

于 2013-05-31T20:26:06.910 に答える
1

これを希望どおりに機能させるには、Python プログラム全体を実行し続ける必要があるため、他のプログラムで毎回 interpret.py をスクリプトとして実行するのではなく、 interpret.py が 1 回実行され、一度実行されるように設定する必要があります。プログラムがクエリを作成する必要があるたびに、その既存の instance.py プログラムを使用します。

おそらく、 interpret.py に対して次のようなことを行うことができます。

from data import X
while True:
    query = raw_input("Enter query")

    #do something with query and X

他のプログラムは、クエリを作成する必要があるたびに、実行中の interpret.py プログラムの stdin に行を書き込むことができます。

于 2013-05-31T20:27:14.630 に答える