如何在 psycopg2 线程连接类中重新连接到 postgreSQL? SSL SYSCALL 错误导致的失败:在 Azure 中检测到 EOF?

2024-05-31

我们的应用程序运行良好,直到我们将 PostgreSQL 移植到 Azure 中的 Microsoft 数据库。然后,我们的应用程序会定期无故失败,并且到处都会出现 SSL SYSCALL 错误 - 删除等。我们已经尝试了互联网上描述的所有内容 - 使用 keepalive args、RAM、内存和其他所有内容。我们想尝试自动重新建立连接。但我们有一个线程连接池。看过这个帖子Psycopg2 在类内自动重新连接 https://stackoverflow.com/questions/62094660/psycopg2-auto-reconnect-inside-a-class但是我们读取数据库的函数在另一个类中。所以我们有两个问题:

1)SSL SYSCALL错误的原因是什么?我已经搜索了所有线索,并且排除了常见的嫌疑人。 2)如何在线程连接池类中发生故障时重新连接 - >这正在烧瓶应用程序中使用

这是我们的应用程序的结构

class DBClass(object):
    _instance = None
    conn= None
    def __new__(cls):
        if cls._instance is None:
            cls._instance = object.__new__(cls)
            try:
                max_conn = 12
                keepalive_args = { "keepalives": 1, "keepalives_idle": 25, "keepalives_interval": 4,"keepalives_count": 9,
                }
               
                db._instance.pool = psycopg2.pool.ThreadedConnectionPool(3, max_conn, db=,
                                                                               host=, user=,
                                                                               password=,
                                                                               port=, **keepalive_args)

            except Exception as ex:
                db._instance = None
                raise ex

        return cls._instance

    def __enter__(self):
        self.conn= self._instance.pool.getconn()
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        self._instance.pool.putconn(self.connection)

    def __del__(self):
        self._instance.pool.closeall()

#另一个 python 模块有一个名为 clsEmployee 的类。我们有几十个使用上述数据库类的函数。像这样的东西。

    with DBClass() as db:
        pg_conn = db.connection
        cur = pg_conn.cursor()
        cur.execute("SELECT * from emp")
        row = cur.fetchone()[0]

有很多方法可以解决这个问题。

提出的解决方案Psycopg2 在类内自动重新连接 https://stackoverflow.com/questions/62094660/psycopg2-auto-reconnect-inside-a-class如果您对执行数据库工作的调用位于 DBClass 之外,仍然可以工作。您只需要调用数据库的函数,然后用装饰器包装它们。装饰器所做的就是添加一个循环以允许多次调用该函数,将实际函数包装在 try/ except 中并在 except 上重新连接。这实际上是处理此类问题的一种非常标准的方法,因为它适用于数据库、API 或任何可能失败的东西。您可能想要做的一件事是在重试中添加指数退避(睡眠调用所在的位置)。

您拥有的另一个选项是创建您自己的游标子类,该子类在覆盖的执行版本中具有相同的重试逻辑。这将完成同样的事情,这只是您认为更容易使用的情况。

由于这是在 Flask 应用程序中使用的,因此您可以修改第一种方法,而不是在模型代码级别进行重试,您可以在 Flask 路由级别进行重试。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 psycopg2 线程连接类中重新连接到 postgreSQL? SSL SYSCALL 错误导致的失败:在 Azure 中检测到 EOF? 的相关文章

随机推荐

  • r:按多列分组并计数

    我有以下数据框 df LeftOrRight SpeedCategory NumThruLanes R 25to45 3 L 45to62 2 R Gt62 1 我想按速度类别对其进行分组 并循环遍历其他列以获取每个速度类别中每个唯一代码的
  • 如何美化PhpStorm和其他Intellij编辑器中的代码?

    有什么方法可以美化 PhpStorm 中的 php 代码吗 最好有键盘快捷键 Choose Code Reformat Code or press Ctrl Alt L EDIT The keyboard shortcode has cha
  • git commit -m 与 git commit -am

    看起来很容易 但我就是不明白 我在我的应用程序的根目录中 这是我的工作流程 git add git commit m added a new feature some files changed git push heroku master
  • JQGrid自定义排序

    我有一个 JQGrid 其中填充了正常工作的数据 默认排序功能按预期工作 但是 我想按单击的列和按名称列排序 每次 我觉得onSortCol是我应该开始的地方 但是文档中没有太多关于如何对表的内容进行排序的内容 理想情况下 我希望不必编写自
  • 如何在C#中剪切、编辑和合并OGG文件?

    我有一个 ogg vorbis 文件 我必须用它执行两个操作 将文件的一部分从一个位置剪切到另一个位置 将另一个文件与现有文件合并 如何在 C 中执行这两个操作 你可以使用 libzplay 来做到这一点http libzplay sour
  • Flutter android 风味生成 apk

    我正在尝试使用 flutter 设置 Android 风格 我有两个入口点 lib main prod dart lib main dev dart 我还在我的 gradle 文件中添加了以下内容 flavorDimensions vers
  • 获取过时的 Composer 软件包列表

    我想获取过时的软件包列表 这些软件包将在我发布时更新composer update 作曲家有这样的功能吗 如果没有 有没有办法做到这一点 有或没有作曲家 Update Since Composer v1 1 2016 年 5 月 https
  • 多个应用程序中的 Angular 共享资产

    我正在开发多个小型应用程序 这些应用程序将共享公共和共享模块以及资产 关于如何创建项目结构的部分已在这里回答 https stackoverflow com a 61254557 1351452 https stackoverflow co
  • JBehave 和 Maven - 如何跳过场景测试

    我正在使用 jbehave 和 jbehave maven 插件来运行一组场景测试 让我的测试类扩展 JUnitStories 一切都运行良好 唯一的问题是 我无法停止运行测试 每次我运行 Maven 安装目标时 它都会运行测试 我尝试在下
  • 向 Shopify Liquid 链接添加类?

    我正在尝试为我的客户生成注销链接 但想对该链接应用一个类 layout customer log out t customer logout link 上述液态代码生成 a href account logout Log out a 我想添
  • PyQt:使用 alpha 通道创建 QPixmap,而不是预乘颜色通道

    我想创建一个 QPixmap 来使用 QPainter 进行绘制 QPixmap 应支持透明度 而不使用预乘颜色通道 目前 我通过创建具有所需尺寸的 QPixmap 并用每个通道 包括 alpha 设置为零的 QColor 填充它来实现此目
  • 如何像facebook和twitter一样显示帖子更新时间?

    我正在制作一个通知平台 而不是显示通知到来的时间 我想显示自通知到达以来经过的时间 就像在 Twitter 和 Facebook 上发生的那样 他们显示 32m 1 小时前等 我想用JavaScript Java来实现这段代码 任何帮助将非
  • GCC 详细模式输出解释

    我是 Linux 新手 谁能向我解释一下我的 hello world 程序的以下详细模式输出 另外 这些文件是做什么用的crt1 o crti o crtend o crtbegin o and crtn o and lc and lgcc
  • 如何列出喜欢某个页面或感兴趣的 Facebook 用户 [重复]

    这个问题在这里已经有答案了 可能的重复 检索 Facebook 粉丝姓名 https stackoverflow com questions 2001281 retrieve facebook fan names 我想要获取喜欢某个页面或感
  • 是否可以在通过表单上传本地图像之前预览它们?

    更具体地说 我想使用一种带有一个或多个用于图像的文件输入字段的表单 当这些字段发生更改时 我想在将数据发送到服务器之前显示关联图像的预览 我尝试过多种 JavaScript 方法 但总是遇到安全错误 我不介意使用 java 或 flash
  • 嵌套名称说明符中的类型不完整

    我尝试在嵌套名称说明符中使用不完整类型 如下所示 class A int b A c error incomplete type A used in nested name specifier class A static const in
  • Python-如何删除 json 字符串中最后的逗号(,)

    嗨 我刚刚开始尝试 python tornado 和 mongodb 我是新手 我编写了一个简单的 get 函数来从 mongodb 获取所有值并以 JSON 格式返回 问题是 当我尝试将输出写入 JSON 字符串时 我在集合中的最后一条记
  • 从 BitmapImage 获取支持的图像格式

    如何获取 System Windows Media Imaging BitmapImage 支持的图像格式列表 我正在用 C WPF 编写一个简单的图像处理工具 BitmapImage 类是更有用的位图类之一 因为它能够从多种格式进行解码
  • Android ListView 子项

    我最近为 Android 应用程序创建了一个新的 ListView 对象 但遇到了一些错误 当我尝试使用简单适配器创建一个包含列表中子项目的项目时 创建的最新项目与其他项目重叠 我正在使用地图列表来创建项目 例如 如果我向地图列表中添加一个
  • 如何在 psycopg2 线程连接类中重新连接到 postgreSQL? SSL SYSCALL 错误导致的失败:在 Azure 中检测到 EOF?

    我们的应用程序运行良好 直到我们将 PostgreSQL 移植到 Azure 中的 Microsoft 数据库 然后 我们的应用程序会定期无故失败 并且到处都会出现 SSL SYSCALL 错误 删除等 我们已经尝试了互联网上描述的所有内容