Я работаю над приложением WSGI (Simple HTTP RPC API), созданным с использованием библиотеки spyne, которая работает на сервере apache2.Он использует библиотеку psycopg2 для обработки соединений с базой данных.
Все работает нормально, но проблема возникает, когда соединение с сервером базы данных разорвано или сервер недоступен через сеть.Когда запрос отправляется, он зависает в течение 120 секунд (по умолчанию он выглядит как тайм-аут сокета Unix), затем возникает исключение psycopg2 OperationalError .
DB Соедините часть с connect_timeout:
try:
connection_string = 'dbname=%s user=%s host=%s password=%s connect_timeout=5' % (db_name, db_user, server_ip, '')
cx = psycopg2.connect(connection_string)
except psycopg2.OperationalError as e:
log.error('Unable to connect to the database at %s, %s' % (server_ip, e))
Я попытался использовать эту часть кода в другом скрипте, и она работала как ожидалось, через 5 секунд она поднялась OperationalError исключение, но когда я запускаю тот же код в приложении WSGI на apache2, это не работает.
Я попытался установить 'socket-timeout = 5' для WSGIDaemonProcess и после этого он зависает только на 5 секунд, но возвращает HTTP-код 504 клиенту вместо исключения psycopg2.Я не знаю, почему он игнорирует тайм-аут psycop2.connect в приложении WSGI.
Кто-нибудь знает, что может быть не так, пожалуйста?
Спасибо!