Po długiej i brutalnej walce, myślę, że naprawiłem ten problem, po prostu stosując strategię, o której mówią inni, ale używając samej funkcji 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)
Widziałem, jak psycopg2 stale zawiesza się na długich zapytaniach, ale teraz problem wydaje się być w pełni rozwiązany.
Pamiętaj, że może to być nowa funkcja, ponieważ to pytanie jest stare.