2
リクエスト中にGoogle Maps APIに接続するHerokuでFlaskアプリケーションを実行しています。このようなもの:サードパーティAPIへのグローバル接続Flask
client = geocoders.GoogleV3(
client_id=self.config['GM_CLIENT_ID'],
secret_key=self.config['GM_SECRET_KEY']
)
client.do_geocoding(...)
今はすべてのリクエストに対して新しいクライアントを作成しています。複数のリクエストにまたがって1つの接続を維持するにはどうすればよいですか?
アプリケーションの起動時にこのクライアントを作成することはできず、他のアプリケーションで使用できるようにクライアントオブジェクトを渡すことはできませんか? – idjaw
できますか?アプリケーションは実際にはとても複雑なので、現実的には、これを動作させるにはクライアントをグローバル変数にする必要があると思います。しかし、世界的な変動はフラスコの悪い考えであるようですね? (http://stackoverflow.com/questions/32815451/are-global-variables-thread-safe-in-flask)クライアントが読み取り専用なので、この場合は大丈夫でしょうか?私が混乱して聞こえると、それは私が生きているからです... –
全体的なデザインプラクティスは、グローバルが本当に使いこなすことは決してありません。しかし、あなたの現在のコードがどのようなリファクタリングの悪夢をあなたがここで扱っているのか知るためにどのように構造化されているのかは分かりません。表示しているコードスニペットがメソッド内にある場合、そのクラスで初期化されるクライアントを設定することができます。そのため、単にクライアント呼び出しを変更して、インスタンスclient-> self.clientを使用することができます。 – idjaw