2012-07-24 11 views
11

xxxが何らかのサービス(dynamodb、s3など)を複数回呼び出すboto.connect_xxxを呼び出すと、毎回新しい接続プールが作成されますか?Boto connect_xxxメソッドと接続プール

@app.before_request 
def before_request(): 
    g.db = connect_dynamodb() 

は、私はいつもの接続を確認するために、私はそれが新しいセキュリティトークンを作成する場合は、各要求の前にこれを行うにはしたくない。このようなものは(フラスコの例)私は何をしたいです、等、全体のrigamarole、毎回。アプリケーションの起動時にconnect_xxx()を一度呼び出すだけで、必要に応じてbotoを使用して新しい接続を生成することは安全ですか?

答えて

11

アプリケーションの起動時にconnect_xxxメソッドを一度呼び出すと、接続を管理するためにbotoを使用することをお勧めします。このルールの唯一の例外は、複数のスレッドを使用している場合です。その場合、botoはスレッドセーフではないhttplibを使用するため、各スレッドは独自の接続を作成する必要があります。

各リクエストの前にconnect_xxxメソッドを呼び出しても、本当は大丈夫です。 Botoはクラスレベルで接続をプールし、これをかなり効率的に処理する必要があります。

+1

ありがとうございました!そして、ボット自体のおかげで、私はそれなしでは生きられなかった。あなたのスレッドの言及は、本質的に同じトピック[ここ](http://stackoverflow.com/questions/11640031/uwsgiflaskboto-thread-safety)に関する別の質問を促しました。 –

+0

この情報に使用できるドキュメントの参照はありますか? –

+0

'' connect_xxx''メソッドは実際にスレッドセーフな '' AWSAuthConnection''のサブクラスのインスタンスを返します。すべてのスレッドではなく、プロセス(および接続引数)ごとに1回だけこれを行う必要があります。接続プールはクラスレベルには格納されません。 – malthe