2016-05-10 2 views
1

私はこのコードを使って、必要なファイルをロードし、サーバが起動しても内部で必要な情報を表示しますif __name__ == "__main__":私はバックグラウンドプロセスを開始しています。そして最後にapp.run 。Webアプリケーションが何度も起動します - web.py

私の問題はすべてを読み込んだ後、バックグラウンドプロセスの開始になります。印刷が開始され、最初からすべてが読み込まれます。また、サーバーが最初の要求(GET/POST)を取得したときも同じです。一度ロードするにはどうすればいいですか?

import web 
from multiprocessing import Process 
import scripts 
print 'Engine Started' 
# Code to load and print necessary stuff goes here... 

urls = (
    '/test(.*)', 'Test' 
) 

class Test(): 

    def GET(self,r): 
     tt = web.input().t 
     print tt 
     return tt 


if __name__ == "__main__": 
    try: 
     print 'Cache initializing...' 
     p = Process(target=scripts.initiate_cleaner) 
     p.start() # Starts the background process 
    except Exception, err: 
     print "Error initializing cache" 
     print err 

    app = web.application(urls, globals()) 
    app.run() 

だからこれは、プロセスを開始し、ローカルホストから要求した後(「エンジン始動」を3回印刷します)3回ロード:?8080 /テストをtは、ER

を=私はthisを通過したが、それはフラスコ内で問題を解決し、私はweb.pyを使用しています

+1

'print 'Engine Started''は' if __name__ == "__main __": ' –

+0

@PadraicCunninghamの中にありませんので、すべての読み込みコードを入れて' if __name__ == "__main__" '? –

+0

'if __name__ ==" __main __ "'の中にあるものだけが、何かがファイルからインポートされたときには実行されません。これは、ファイルを実行する場合にのみ、ファイルを実行するときの中の何かを実行するときにのみ、それを使用する主なポイントです。 –

答えて

1

私はこの驚きがなぜ、またはそれが問題になるのか分かりません。バックグラウンドプロセスとは、定義上、Webプロセスとは別のプロセスです。それぞれがコードをインポートし、そのメッセージを出力します。そのメッセージを見たくない場合は、ブロックif __name__の中に入れてください。

+0

okありがとう私は上記の場所にコードを移動したら私の問題は解決しました。しかし、プロセスを実行するとき、または第1の要求が来たときに、なぜコード全体を処理するのでしょうか。 2回目以降のリクエストではありませんか? –

+0

最初の要求の後、プロセスは既に実行されており、コードはすでにインポートされています。 –

関連する問題