新しいスレッドでフラスコサーバーを開き、実行中のプログラムに関する情報を提供するPythonデバッグライブラリを作成しています。これは、デバッグされているプログラムがWebサーバー自体でない場合にうまく動作します。しかし、デバッグモードで動作している別のフラスコサーバーと同時に実行しようとすると、物事が壊れます。 2番目のサーバーにアクセスしようとすると、2つのサーバー間で結果が交互になります。2つのスレッド/プロセスで2つのフラスコサーバーを1つのPythonプログラムの下で2つのポートで実行するにはどうすればよいですか?
はここでの例です:私は私のブラウザでhttp://localhost:5002/を訪問したときに
from flask.app import Flask
from threading import Thread
# app1 represents my debugging library
app1 = Flask('app1')
@app1.route('/')
def foo():
return '1'
Thread(target=lambda: app1.run(port=5001)).start()
# Cannot change code after here as I'm not the one writing it
app2 = Flask('app2')
@app2.route('/')
def bar():
return '2'
app2.run(debug=True, port=5002)
さて、その結果は、代わりに一貫し2
という1
または2
いずれであってもよいです。
Thread
の代わりにmultiprocessing.Process
を使用しても同じ結果が得られます。
これはどうして起こりますか?どのように回避できますか?フラスコ/ワルキューグ/ WSGIでやむを得ないことはありますか?私はシンプルさのためにフラスコが好きで、理想的にはそれを使い続けたいと思っています。それが不可能な場合、同時に実行されている他のWebサーバーに干渉しないように私が使用できる最も単純なライブラリ/フレームワークは何ですか?可能であれば、プロセスの代わりにスレッドを使用したいと思います。