我致力于使用在apache2服务器上运行的spyne库创建的WSGI应用程序(简单HTTP RPC API)。它使用psycopg2库处理数据库连接。
一切正常,但是当与数据库服务器的连接断开或无法通过网络访问服务器时,会出现问题。发送请求后,它将挂起120秒(默认情况下似乎是Unix套接字超时),然后引发psycopg2 OperationalError 异常。
具有connect_timeout的DB Connect部分:
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 异常,但是当我在apache2上的WSGI应用程序中运行相同的代码时,不起作用。
我尝试为 WSGIDaemonProcess 设置'socket-timeout = 5',此后它仅挂起5秒钟,但它向客户端而不是返回HTTP代码504 psycopg2异常。我不知道为什么它会忽略WSGI应用程序中的psycop2.connect超时。
有人知道吗,可能是什么问题?
谢谢!