2012-07-24 9 views
11

Si llamo boto.connect_xxx, donde xxx es algún servicio (dynamodb, s3, etc.) varias veces, ¿crea un nuevo grupo de conexiones cada vez? Lo que me gustaría hacer es algo como esto (ejemplo en el frasco):Método Boto connect_xxx y pools de conexión

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

para asegurarse de que siempre se conectan, pero no quiero hacer esto antes de cada solicitud, si se va a crear nuevas señales de seguridad , etc, todo el rigamarole, cada vez. ¿Es seguro simplemente llamar a connect_xxx() una vez cuando se inicia la aplicación, y confiar en boto para generar nuevas conexiones según sea necesario, etc.?

Respuesta

11

El mejor enfoque es llamar al método connect_xxx una vez cuando se inicia su aplicación y confiar en boto para administrar la conexión a partir de ese momento. La única excepción a esa regla es si está usando múltiples hilos. En ese caso, cada hilo debe crear su propia conexión ya que boto usa httplib que no es seguro para hilos.

Incluso si llama al método connect_xxx antes de cada solicitud, realmente debería estar bien. Boto agrupa la conexión a nivel de clase y debería manejar esto de una manera bastante eficiente.

+1

¡Gracias por la respuesta! Y gracias por boto en sí, no podría vivir sin eso. Su mención de los hilos provocó otra pregunta esencialmente sobre el mismo tema, [aquí] (http://stackoverflow.com/questions/11640031/uwsgiflaskboto-thread-safety). –

+0

¿Hay referencias de documentación disponibles para esta información? –

+0

Los métodos '' connect_xxx'' devuelven una instancia de una subclase de '' AWSAuthConnection'' que de hecho es segura para subprocesos. Solo debe hacer esto una vez por proceso (y argumentos de conexión), no en cada hilo. El grupo de conexiones no se almacena en el nivel de clase. – malthe

Cuestiones relacionadas