2010-08-18 24 views
5

Soy nuevo en SQLAlchemy, pero estoy tratando de usarlo para crear y completar una base de datos para un proyecto personal. Establecí pool_timeout en 43200 (doce horas), pero sigo recibiendo tiempos de espera del socket.Evitar los tiempos de espera del socket en SQLAlchemy

engine = sqlalchemy.create_engine(
      'postgresql+pg8000://gdwatson:[email protected]/dbname', 
      pool_timeout=43200) 
db.tables.meta.drop_all(bind=engine) 
db.tables.meta.create_all(bind=engine) 

conn = engine.connect() 
dataset = build_dataset() 
conn.execute(db.tables.mytable.insert(), 
      dataset) 
conn.close() 

termino conseguir socket.timeout: timed out después de una buena cantidad de tiempo de procesamiento, pero probablemente menos de una hora y ciertamente menores de dos años. En realidad, se trata de tres niveles de profundidad: mientras se manejaba la excepción de tiempo de espera, se producía otra, y luego, al manejarla, se producía otra. (Tal vez esta es la reintentación de la biblioteca?) La excepción se produce en conn.execute, y no sé cómo evitarlo.

Una búsqueda no ha encontrado nada informativo. Estoy usando Python 3.1 y SQLAlchemy 0.6.1, por lo que vale.

+0

Terminé cortando el conjunto de datos en trozos de 1000 entradas e insertándolo un trozo a la vez. Eso funcionó alrededor del problema, incluso si es un poco más feo. –

Respuesta

2

No sé si este es el método recomendado, pero puede enviar periódicamente una declaración SELECT 1 y asegurarse de que la conexión no esté inactiva.
También puede consultar this para obtener más información

Cuestiones relacionadas