3

私はPython、Mod_WSGI、Bottleにかなり慣れていません。私の主な問題は、Mod_WSGIを使用してプロセスを実行するときに、初期化時にファイルを1回ロードすることです。ターミナルでスクリプトを実行すると、次のようになります。if __name__ == '__main__'

初期化時に(または最初に呼び出されたときに)ファイルを1回ロードして、プロセスへの後続の呼び出しでファイルをリロードする必要がないようにする必要があります。これを行う方法がわかりません。

次のコードは、誰かが推奨ページにアクセスするたびに実行されます

@route('/recommend')
def recommend():
    parser = OptionParser(usage="usage: %prog [options]")
    parser.add_option('-f', '--file', default='data.csv', help='Specify csv file to read item data from.')
    parser.add_option('-D', '--debug', action='store_true', dest='debug', help='Put bottle in debug mode.')
    (options, args) = parser.parse_args()
    return res.recommend(request)

初期化時に最初の4行(パーサーを含む行)を実行して、推奨ページにアクセスするたびにres.recommend()を呼び出す必要があるようにするにはどうすればよいですか?

助けていただければ幸いです、Mo

4

3 に答える 3

2

デーモン モードの場合は、WSGI スクリプト ファイルのグローバル スコープに配置します。そのファイルは、プロセスごとに 1 回だけロードされます。これは通常、そのアプリケーションにマップされる最初の要求で行われます。

組み込みモードの場合、WSGI スクリプト ファイルを変更すると、同じプロセスで再ロードできます。その場合、必要に応じてデーモン モードの場合でも、別のスクリプト ファイルを使用し、WSGIImportScript ディレクティブを使用して、プロセスの開始時にそれを強制的にロードします。

見る:

http://code.google.com/p/modwsgi/wiki/ConfigurationDirectives#WSGIImportScript

WSGI アプリケーションが同じサブ インタープリターにロードされるためには、どのプロセス グループ/アプリケーション グループで実行されているかを知る必要があるため、WSGIProcessGroup/WSGIApplicationGroup ディレクティブも参照してください。

于 2011-06-03T03:10:11.217 に答える
0

Python モジュールは、最初にロードしたときにのみ実行されます。

後続の呼び出しでコードが再度実行されない

例えば

mod.py:

x = 10
print(x)

main.py:

import mod #will print 10
mod.x = 5
import mod #nothing is printed. mod.x == 5
于 2011-06-03T00:33:44.043 に答える
0

あなたが実際に話しているのは、ファイルの読み取り結果をキャッシュすることです。

これを簡単にします。

datacache = None

@route("/someroute")
def someroute():
    if not datacache:
        datacache = do_something_clever_with_file(open("filename"))
    page = make_page_from_data(datacache)
    return page

また、Web メソッドでスクリプト入力引数を解析することは、単に悪い形式です。同僚の机の中に濡れた魚を置いておくようなものです。

代わりに、そこにオプションを含む構成ファイルを用意し、構成ファイルを読み取ります。

あなたの中の勇敢な人のために、 memoizing デコレータを見てください。これをキャッシュに変えることは、読者の演習として残されています。

于 2012-03-14T20:55:48.173 に答える