为什么PyMongo抛出自动重新连接?

安德烈·巴桑(AndreiBârsan)

在研究Python Web应用程序的一些奇怪问题(特别是有关MongoDB连接的问题)时,我注意到PyMongo官方文档页面上的某些内容我的Web应用程序使用Flask,但这不应影响我面临的问题。

PyMongo驱动程序会进行连接池化,但是AutoReconnect当连接陈旧并且需要重新连接时,它也会引发异常()。

它指出(关于自动重新连接例外):

为了自动重新连接,您必须处理此异常,并认识到导致该异常的操作不一定成功。以后的操作将尝试打开与数据库的新连接(并将继续引发此异常,直到建立第一个成功的连接为止)。

我已经注意到,这实际上一直在发生(这似乎不是错误)。似乎静止了几分钟后,MongoDB服务器关闭了连接,需要由Web应用程序重新创建连接。

我不明白的是为什么PyMongo驱动程序在重新连接时会引发错误(驱动程序的用户需要自行处理),而不是透明地执行。(甚至有可能是一个选项,用户可以设置使AutoReconnect异常抛出,但将不是一个合理的默认是这些异常没有得到根本抛出,以及连接无缝重现?)

我从未在其他数据库系统上遇到过这种行为,这就是为什么我有点困惑的原因。

还值得一提的是,在连接到本地开发MongoDB服务器时,Web应用程序的MongoDB连接永远不会失败(我认为这与本地连接有关,并且该连接是通过UNIX套接字而不是通过UNIX套接字完成的,这与它有关。网络套接字,但我可能错了。

伯尼·哈克特(Bernie Hackett)

您误会了自动重新连接。当驱动程序尝试与服务器通信(发送命令或其他操作)并且发生网络故障或类似问题时,将引发此错误。异常的名称旨在表明您不必创建新的MongoClient实例,现有的客户端将在您的应用程序尝试下一个操作时尝试自动重新连接。如果出现相同的问题,则会再次引发“自动重新连接”。

我怀疑您看到套接字超时(并且引发了自动重新连接)的原因是服务器和您的应用程序之间存在负载平衡器,该负载平衡器会在一段时间不活动后关闭连接。例如,在套接字上没有任何活动13分钟之后,这显然发生在Microsoft的Azure平台上。您可能可以使用PyMongo 2.8中添加的socketKeepAlive选项来解决此问题。请注意,您还必须将应用程序服务器上的保持活动间隔设置为适当的值(Linux上的默认值为2小时)。浏览此处获取更多信息。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么抛出自身会导致异常?

来自分类Dev

为什么断开连接然后重新连接的mdadm RAID1磁盘没有自动重新连接并重新同步?

来自分类Dev

SignalR在什么阶段自动重新连接

来自分类Dev

为什么页面会自动重新加载?

来自分类Dev

在Swift Xcode项目中LLDB抛出自动导入错误

来自分类Dev

为什么信标会自动断开连接?

来自分类Dev

为什么在连接终止时没有抛出异常?

来自分类Dev

为什么在连接终止时没有抛出异常?

来自分类Dev

为什么抛出ArrayStoreException?

来自分类Dev

为什么我的活动自动重新开始?

来自分类Dev

为什么systemd无法自动重新加载单位文件?

来自分类Dev

为什么重新打开与mysql的连接很重要?

来自分类Dev

恢复连接后为什么需要重新启动ping

来自分类Dev

重新连接后为什么我的MAC地址会重置?

来自分类Dev

重新抛出自定义异常的几种方法C ++ 11

来自分类Dev

为什么Blazor页面会自动创建websocket连接?

来自分类Dev

为什么 LE 设备会在 HCI 上自动连接?

来自分类Dev

ZeroMQ不会自动重新连接

来自分类Dev

EventSource永久自动重新连接

来自分类Dev

SSHFS-自动重新连接

来自分类Dev

如何让wifi自动重新连接?

来自分类Dev

自动重新连接到wifi

来自分类Dev

为什么在某些情况下不声明而重新抛出Throwable是合法的?

来自分类Dev

关于重新排序:为什么这个代码抛出的RuntimeException尽管使用挥发性?

来自分类Dev

断开连接后Netcat自动重新连接

来自分类Dev

重新连接时,为什么必须在tmux中重新设置环境变量?

来自分类Dev

为什么String用+运算符连接null并使用concate()方法抛出NullPointerException

来自分类Dev

为什么start()抛出异常?

来自分类Dev

为什么Range抛出UnsupportedOperationException?

Related 相关文章

  1. 1

    为什么抛出自身会导致异常?

  2. 2

    为什么断开连接然后重新连接的mdadm RAID1磁盘没有自动重新连接并重新同步?

  3. 3

    SignalR在什么阶段自动重新连接

  4. 4

    为什么页面会自动重新加载?

  5. 5

    在Swift Xcode项目中LLDB抛出自动导入错误

  6. 6

    为什么信标会自动断开连接?

  7. 7

    为什么在连接终止时没有抛出异常?

  8. 8

    为什么在连接终止时没有抛出异常?

  9. 9

    为什么抛出ArrayStoreException?

  10. 10

    为什么我的活动自动重新开始?

  11. 11

    为什么systemd无法自动重新加载单位文件?

  12. 12

    为什么重新打开与mysql的连接很重要?

  13. 13

    恢复连接后为什么需要重新启动ping

  14. 14

    重新连接后为什么我的MAC地址会重置?

  15. 15

    重新抛出自定义异常的几种方法C ++ 11

  16. 16

    为什么Blazor页面会自动创建websocket连接?

  17. 17

    为什么 LE 设备会在 HCI 上自动连接?

  18. 18

    ZeroMQ不会自动重新连接

  19. 19

    EventSource永久自动重新连接

  20. 20

    SSHFS-自动重新连接

  21. 21

    如何让wifi自动重新连接?

  22. 22

    自动重新连接到wifi

  23. 23

    为什么在某些情况下不声明而重新抛出Throwable是合法的?

  24. 24

    关于重新排序:为什么这个代码抛出的RuntimeException尽管使用挥发性?

  25. 25

    断开连接后Netcat自动重新连接

  26. 26

    重新连接时,为什么必须在tmux中重新设置环境变量?

  27. 27

    为什么String用+运算符连接null并使用concate()方法抛出NullPointerException

  28. 28

    为什么start()抛出异常?

  29. 29

    为什么Range抛出UnsupportedOperationException?

热门标签

归档