フラスコは、クライアントからの要求を受けて、ビュー機能が要求を処理するために、リクエスト・オブジェクト要求にアクセスすることができましょう。私たちのような、で機能するようにしようとして渡されたパラメータとしてオブジェクトを要求することができます。
、からフラスコフラスコをインポート要求する アプリケーションは、フラスコ(name__ __)= app.route @( '/') hello_world(リクエスト)DEF:渡されたパラメータとして#リクエストオブジェクトを データ= request.jsonの リターン'Hello Worldの' IFは__name__を= = '__main__': app.run()
しかし、我々はまた、単純なだけでなく、エラーを起こしやすいだけでなく、影響を与え、周りに渡されたいくつかの他のオブジェクトを使用することができます。
この問題を解決するために、スレッドB内のスレッドではない、唯一のグローバル変数であり、すなわち、単一のスレッドがグローバル変数であることを、「リクエストコンテキスト」、グローバル変数「として」要求オブジェクトを使用するが、要求は、スレッドオブジェクトリクエストオブジェクトは、エラーを混乱されていないことを確実にするために、グローバル変数、
だから、通常我々はそれを書きます:
フラスコのインポートフラスコから、要求する アプリ=フラスコ(__ name__) app.route @( '/') DEF hello_world(): データ= request.jsonの リターン"こんにちは、世界 __name__ == '__main__'の場合: app.run()
すなわち、スレッドは、要求オブジェクトBのスレッドにアクセスすることができない、要求オブジェクトは、単一のスレッドをアクセス可能です。たとえば、私たちは、非同期スレッドプールを使用し、機能のサブスレッドのアクセス要求には、例えば、光栄することはできません。
フラスコからフラスコをインポートし、依頼 のインポート時間を インポートThreadPoolExecutor concurrent.futuresから アプリケーションをフラスコ(__ name__)= キュータ= ThreadPoolExecutor(2) @ app.route( '/') :DEF update_redis() ここでは、オープンexecutor.submit(do_update)#をスレッド、実行中のdo_updateの リターン"こんにちは、世界の DEFのdo_update(): r_json要求#=子スレッドは、メインスレッドでリクエストオブジェクトにアクセスできないため、プログラムは、ここで立ち往生されます time.sleep(5) 印刷([スタート更新'、r_json、タイプ(リクエスト)) IF __name__ == '__main__': app.run()
だから、どのように我々は、最も簡単な方法で、この問題を解決するのですサブスレッド関数のパラメータとしてメインスレッドでオブジェクトを要求することです。例えば:
フラスコフラスコをからインポートし、依頼 のインポート時 ThreadPoolExecutorからインポートconcurrent.futures アプリケーションはフラスコ(__ name__)= エグゼキュータを= ThreadPoolExecutor(2) @ app.route( '/') DEF update_redis(): r_json = request.json executor.submit(do_updateサブスレッド処理機能に渡されたパラメータとして、(r_json))#のJSONデータリクエストオブジェクト リターン"こんにちは世界 :DEFのdo_update(r_json) time.sleep(3)。 印刷([スタート更新'、r_json) IF == __name__ '__main__': app.run()
これは、子スレッドがメインスレッドでオブジェクトのデータ要求にアクセスすることができない問題を解決することができます。より良い方法があれば、私は、相互の交流と共通の進捗状況を連絡したいです。