2012-07-24 30 views
11

boto.connect_xxx işlevini çağırırsam, xxx bazı hizmetlerden (dynamodb, s3, vb.) Birden çok kez yararlanırsa, her seferinde yeni bir bağlantı havuzu oluşturur mu?Boto connect_xxx yöntemi ve bağlantı havuzları

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

Hep bağlanmak emin olmak için, ama yeni güvenlik belirteçleri yaratacak eğer her istek önce bunu istemiyorum: Böyle bir şey (Flask örnek) Ne yapmak istiyorum olduğunu , vs, her zaman, her zaman. Uygulama başladığında connect_xxx() öğesini çağırmak ve gerektiğinde yeni bağlantılar oluşturmak için boto'ya güvenmek güvenli midir?

cevap

11

En iyi yaklaşım, uygulama başladığında connect_xxx yöntemini çağırmak ve bağlantıyı daha sonra etkinleştirmek için boto'ya güvenmektir. Birden fazla iş parçacığı kullanıyorsanız, bu kuralın tek istisnasıdır. Bu durumda, boto, threadafe olmayan httplib'yi kullandığından, her bir iş parçacığının kendi bağlantısını oluşturması gerekir.

Her istekten önce connect_xxx yöntemini çağırsanız bile, gerçekten iyi olmalısınız. Boto havuzları sınıf seviyesinde birleştirir ve bunu oldukça verimli bir şekilde ele almalıdır.

+1

Cevabınız için teşekkürler! Ve boto için teşekkürler, onsuz yaşayamam. Konudan bahsetmeniz, esasen aynı konuyla ilgili başka bir soru sordu: [burada] (http://stackoverflow.com/questions/11640031/uwsgiflaskboto-thread-safety). –

+0

Bu bilgi için kullanılabilir belge referansları var mı? –

+0

'' connect_xxx'' yöntemleri, '' AWSAuthConnection'' alt sınıfının bir örneğini döndürür ve bu da gerçekten güvenlidir. Her işlemde (ve bağlantı bağımsız değişkenlerini) her seferinde yapmalısınız - her iş parçacığında değil. Bağlantı havuzu, sınıf seviyesinde saklanmaz. – malthe

İlgili konular