След дълга и брутална борба, мисля, че поправих този проблем, като просто използвах стратегията, за която другите говорят, но използвах самата функция за свързване на psycopg2:
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)
Виждах, че psycopg2 виси постоянно при дълго изпълнявани заявки, но сега проблемът изглежда е напълно разрешен.
Имайте предвид, че това може да е нова функционалност, тъй като този въпрос е стар.