2014-12-24 27 views
12

Büyük bir sorunum var: Python yazılımımın çalıştığı sunucunun yönlendiricisinde bazı donanım sorunları var gibi görünüyor. Veritabanına bağlantı sadece her üç seferde başarılıdır. Yani bir zaman aşımı istisnası almadan önce bir psycopg2.connect() 5 dakika kadar sürebilir.Python psycopg2 zaman aşımı

2014-12-23 15:03:12,461 - ERROR - could not connect to server: Connection timed out 
    Is the server running on host "172.20.19.1" and accepting 

Kullandığım kod bu.

# Connection to the DB 
try: 
    db = psycopg2.connect(host=dhost, database=ddatabase, 
          user=duser, password=dpassword) 
    cursor = db.cursor(cursor_factory=psycopg2.extras.DictCursor) 

except psycopg2.DatabaseError, err: 
    print(str(err)) 
    logging.error(str(err)) 
    logging.info('program terminated') 
    sys.exit(1) 

Ben sorgu için bazı zaman aşımı eklemeler çalıştı, ancak bağlantı tüm kurulmuş got etmediğiniz için, yardımcı olmadı.

Bir yol var mı, bağlantı kurulamadığı zaman programı hemen durdurabilir miyim?

cevap

18

connect işlevinin anahtar sözcükleri sözdizimini kullanırken, libpd destekli bağlantı parametrelerinden herhangi birini kullanmak mümkündür. Bunlar arasında saniyede connect_timeout vardır:

db = psycopg2.connect (
    host=dhost, database=ddatabase, 
    user=duser, password=dpassword, 
    connect_timeout=3 
) 

http://www.postgresql.org/docs/current/static/libpq-connect.html#LIBPQ-PARAMKEYWORDS

http://initd.org/psycopg/docs/module.html

bir bağlantı zaman aşımı bir OperationalError durum oluşturur.

+0

İlk olarak yorum yapmak, yeni soruları hak etse de: Benim durumumda zaman aşımının yanı sıra şu istemi alıyorum: "Sunucu ana bilgisayar üzerinde çalışıyor mu?" Xxxxxx.xxxxxx.us-west-1.rds. amazonaws.com "(xx.x.xxx.xxx) ve 5432 numaralı bağlantı noktasında TCP/IP bağlantılarını kabul ediyor musunuz?". Cevap gerçekten de evet. Aslında, bu aracın bir düğüm varyasyonunda bağlantı kurabilirim, ancak yazdığım 'psycopg2' versiyonu üzerinden bağlantı kuramadım. – kuanb