热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

为什么PyMongo会抛出AutoReconnect?

如何解决《为什么PyMongo会抛出AutoReconnect?》经验,为你挑选了1个好方法。

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

PyMongo驱动程序执行连接池,但是AutoReconnect当连接失效并且重新连接到期时,它也会抛出异常().

它声明(关于AutoReconnect异常):

为了自动重新连接,您必须处理此异常,并认识到导致它的操作未必成功.将来的操作将尝试打开与数据库的新连接(并将继续引发此异常,直到第一次成功建立连接).

我注意到这实际上经常发生(并且它似乎不是一个错误).MongoDB服务器在几分钟不活动之后关闭连接,并且需要由Web应用程序重新创建.

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

我从来没有遇到过使用其他数据库系统的这种行为,这就是为什么我有点困惑.

还值得一提的是,当连接到我的本地开发MongoDB服务器时,我的Web应用程序的MongoDB连接永远不会失败(我假设它与本地连接的事实有关,并且连接是通过UNIX套接字而不是通过UNIX套接字完成的一个网络套接字,但我可能是错的).



1> Bernie Hacke..:

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

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


这正是问题(它是特定于Azure的).我们现在在AWS上,我还没有看到这个问题.谢谢(你的)信息!
推荐阅读
author-avatar
这是个新名字
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有