Efter en lång och brutal kamp tror jag att jag löste det här problemet genom att helt enkelt göra den strategi som andra pratar om, men att använda själva funktionen psycopg2 connect:
from psycopg2 import connect
conn = connect(
database=database,
user=username,
password=password,
host=hostname,
port=port,
connect_timeout=3,
# https://www.postgresql.org/docs/9.3/libpq-connect.html
keepalives=1,
keepalives_idle=5,
keepalives_interval=2,
keepalives_count=2)
Jag såg psycopg2 hänga konsekvent på långvariga frågor, men nu verkar problemet vara helt löst.
Observera att detta kan vara ny funktionalitet, eftersom denna fråga är gammal.