Flaskの内部Webサーバーで現在動作する単一のユーザーアプリケーションを作成しました。非常に堅牢ではないようで、ページが読み込まれるのに時間がかかり、ユーザーが待機している間に他の場所を移動するとすぐに、あらゆる種類のソケットエラーでクラッシュします。だから私はそれをApacheに置き換えることを考えました。フラスコの内部WebサーバーをApacheに置き換えます。
問題は、私の現在のコードは、例えば、リモートサーバとzmq接続にsshトンネルを設定してそこにあるデータベースと通信するなど、10スレッド程度のスレッドを最初に起動する単一のプログラムです。最後に、run()ループを実行して内部サーバーを起動します。
私はあらゆる種類の指示に従い、Apacheサービスを最初のページにすることができました。しかし、私は現在ワーカースレッドを利用できず、グローバルに初期化されたクラスもなく、これらのスレッドと通信するためのインターフェイスを保持するグローバル変数は存在しないため、すべてが間違っています。
明らかに私はウェブ開発者ではありません。
現在のコードが「間違っていますか?」合理的な量の作業でApacheで動作させる方法はありますか? Apacheにrun()部分を置き換えて、Apacheが通信する実行中のアプリケーションを持つことができますか?私の現在のアプリケーションは非常に単純化された形式(データ処理スレッドなし)で次のようなものです:
comm=None
app = Flask(__name__)
class CommsHandler(object):
__init__(self):
*Init communication links to external servers and databases*
def request_data(self, request):
*Use initialised links to request something*
return result
@app.route("/", methods=["GET"]):
def mainpage():
return render_template("main.html")
@app.route("/foo", methods=["GET"]):
def foo():
a=comm.request_data("xyzzy")
return render_template("foo.html", data=a)
comm = CommsHandler()
app.run()
これを完全に間違っていませんか?今、app.runを削除してwsgiスクリプトにappクラスをインポートするだけで、グローバル変数commへの参照が不要なので、メインページからの応答が得られます。 "comm"は初期化されていない変数なので、
/fooは機能しません。そして、私はもちろん、なぜ、見ることができます。私はこれをApacheや他のWebサーバーにエクスポートする必要はないと思っただけです。
これはどういうわけか、起動時のrcスクリプトでこのアプリケーションを起動し、通信リンクとアーチングを設定し、Apache/wsgiに新しいアプリケーションを起動する代わりに実行中のアプリケーションの機能を呼び出させることはできますか?
ハンヌ