2010-08-18 22 views
5

Je suis nouveau sur SQLAlchemy, mais j'essaie de l'utiliser pour créer et remplir une base de données pour un projet personnel. J'ai mis pool_timeout à 43200 (douze heures), mais je reçois toujours des délais d'attente de socket.Éviter les délais d'attente de socket dans 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() 

je finis par obtenir socket.timeout: timed out après beaucoup de temps de traitement, mais probablement moins d'une heure et certainement moins de deux ans. Il s'agit en réalité de trois niveaux de profondeur - lors de la gestion de l'exception de délai d'attente un autre s'est produit, puis lors de la manipulation de celui-là encore un autre s'est produit. (Peut-être que c'est la bibliothèque qui réessaye?) L'exception se produit dans conn.execute, et je ne sais pas comment l'empêcher.

Une recherche n'a donné aucun résultat informatif. J'utilise Python 3.1 et SQLAlchemy 0.6.1, pour ce que ça vaut.

+0

J'ai fini par découper un ensemble de données en blocs de 1000 entrées et en l'insérant un morceau à la fois. Cela a fonctionné autour du problème, même si c'est un peu plus laid. –

Répondre

2

Je ne sais pas si c'est la méthode recommandée, mais vous pouvez envoyer périodiquement une instruction SELECT 1 et vous assurer que la connexion n'est pas inactive.
Vous pouvez également regarder dans this pour des conseils