python - Psycopg2 connect_timeout 在 WSGI 应用程序中不起作用
问题描述
我使用在 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 超时。
有谁知道,请问有什么问题吗?
谢谢 !
解决方案
推荐阅读
- istio - 如何解决 istio 代理上的“陈旧”问题?
- python - Tkinter 滚动(帧上的滚动条)
- javascript - 在 Electron 程序中单击按钮运行函数时,页面内容被清除且函数不运行
- javascript - 选择选项后获取文本字段的值
- pandas - Pandas:无法使用 while 循环更改单元格的值
- javascript - AWS Lambda 傀儡师
- javascript - 如何判断多个js已经动态加载
- javascript - 从服务工作者发送的 CORS 预检请求,但不是来自常规请求
- azure-eventhub - 事件中心是否旨在用于事件溯源/仅附加日志架构
- ios - TextField 的背景颜色在属性 didSet 中更改几毫秒后恢复为默认状态