背景

先说一下标题,当我不知道问题的具体原因的时候,上面的标题就是我在搜索引擎中输入的内容。同样的,我还尝试过以下几种搜索组合:

Pymongo insert hangs
Pymongo insert stop
Pymongo insert no return
MongoDB insert hangs
MongoDB insert stop
MongoDB insert no return

从上面几个搜索的关键词,大家也能看出来问题的基本背景,就是使用 Pymongo 执行 insert,但是卡住了。

所说的卡住了,就是说,没有返回值,没有异常,没有报错,就是程序走到那里就不继续向下执行了。

问题描述

以下是代码的基本结构:

 clt = MongoClient("mongodb://192.168.x.x:27017")db = clt['test_bottle']col = dest_db['test_result']idx = 0rs = []for r in records:rs.append(r)idx += 1if idx % 100 == 0:col.insert_many(rs)rs = []

可以看到,很简单,很基础的代码,就是循环插入。问题的现象就是,代码执行到 col.insert_many(rs) 的时候,偶尔会出现程序卡住的情况。

这个卡住是随机的,有时候执行几次就卡住,有时候数据跑完一圈(几百万条数据)也没卡住。

奇怪吧。

这个问题比较诡异的就是,为什么会卡住,如果有问题,你报错就可以了,我捕获异常,然后特殊处理就可以,但是为什么会卡住。

问题分析

行了,直接说问题原因吧:

没有设置超时时间。

可能有的人会很奇怪,这个东西跟超时时间有什么关系?

我们来看一下 MongoDB 的官方文档:

可以看到,关于超时时间的设定一共有两个,分别是 connectTimeoutMSsocketTimeoutMS,有点类似之前说过的 requests 模块的 connect timeoutread timeout,即:连接超时时间读取超时时间

这里比较坑的问题就出现了,这两个配置的默认值是 不超时(never to timeout)

所以,当我们没有执行这两个配置的时候,程序就会一直等待连接或者等待读取数据,也就是咱们上面所说的「卡住」。

解决方法

既然知道了问题原因,那解决思路就清晰了,设置一下超时时间即可。

设置的方式也有很多种,比如我这里就是直接修改了 MongoDB 的连接 uri:

也就是把上面的

clt = MongoClient("mongodb://192.168.x.x:27017")

修改为

clt = MongoClient("mongodb://192.168.x.x:27017/?socketTimeoutMS=3000&connectTimeoutMS=3000")

我这里设置的超时时间都是 3000(3s),大家可以根据自身情况自行设置。

当然,如果这样设置完了之后,记得捕获异常,然后做特殊处理。

好了,今天就和大家分享到这里,祝大家变得更强。

补充知识点:

卡住的「卡」音 qiǎ,不是

【解决方法】Pymongo insert 卡住相关推荐

  1. 更新卡住解决_windows10系统更新卡住的解决方法

    今天小编教你windows10系统更新卡住的解决方法.更新系统是什么呢?系统更新就是指添加新功能及完善现有功能的过程,它可扩展系统功能,解决很多兼容性问题.如果在更新的期间遇到更新过程不动的情况,可参 ...

  2. 王者荣耀s22服务器维修,王者荣耀资源包升级失败 S22资源包升级失败解决方法...

    王者荣耀1月14日资源包升级失败是什么导致的?如何才能解决这个问题?今天版本更新很多人都遇到了各种各样的问题,18183小编将资源包升级失败等问题进行了汇总,会在下面全部分享给大家,告诉玩家们正确的解 ...

  3. 出现should be mapped with insert=“false“ update=“false“的解决方法

    出现should be mapped with insert="false" update="false"的解决方法 参考文章: (1)出现should be ...

  4. 王者服务器延迟高,王者荣耀延迟高卡住不动怎么办 卡顿的解决方法汇总

    很多玩家在玩王者荣耀的恐怕都遇到过延迟变高,然后卡住不动的情况吧,小编也是如此,最近经常性卡顿,很郁闷.那么,出现这样的情况该怎么办呢?有什么好办法可以解决这个问题吗?下面小编就来告诉大家一些常见的解 ...

  5. 更新卡住解决_iPhone手机无法正常下载/安装应用的解决方法

    手机中各类应用给我们的生活娱乐带来很多便利,很多iPhone手机用户平时喜欢收集各种有趣的应用软件,不过最近有不少果粉遇到了无法下载或安装应用的情况,来看看如何解决吧! 问题一:应用下载到一半卡住 建 ...

  6. [转载] AttributeError: ‘numpy.ndarray‘ object has no attribute ‘insert‘的解决方法

    参考链接: Python中的numpy.insert AttributeError: 'numpy.ndarray' object  has no attribute 'insert' 代码: imp ...

  7. 计算机一打开就卡在更新失败,Win10更新系统卡住不动怎么办 Win10系统更新卡住不动解决方法...

    Win10系统在推出后,微软提供了一年的免费升级服务.旗舰有不少用户选择升级使用,但是期间就有不少用户反应win10的不稳定!但是在后续的更新升级中,也变得更加安全稳定!但是还有一些用户又遇到了问题, ...

  8. linux卡住重启_linux df -h 命令卡住 解决方法

    用 df -h 查看磁盘情况,无奈卡住无法显示 解决方法: 1.首先就是使用strace去追踪到底在哪里卡住了 strace df -h 2.如果没有strace命令则进行安装即可 yum insta ...

  9. AndroidStudio导入/第一次新建项目gradle版本错误或者卡住解决方法

    问题 不少人在使用Android Studio导入新的项目或者第一次新建项目时,常常会出现卡死或者gradle报错的现象,这是由于你的系统中没有目标gradle版本,然后Android Studio会 ...

最新文章

  1. 线段树 ---- H. AND = OR (或和与的性质之1的个数 + 线段树)
  2. 【综述专栏】神经网络的可解释性综述
  3. 台式计算机的cpu设置,i7型CPU进行了修改并在台式计算机上使用,这才是真正的计算机之神!...
  4. Android中Intent和Intent过滤器详解
  5. Ubuntu 安装docker-engine的三种方法
  6. 关于OPC自动化接口编程(OPCDAAuto.dll)几点注意问题
  7. 使用GNS3简单模拟帧中继环境
  8. 【学习笔记】OI模板整理
  9. go语言的range使用
  10. 28-33Linux目录指令
  11. 7部署rancher步骤_Rancher发布K3s,真会玩。。
  12. html的空心箭头,CSS实现空心三角指示箭头
  13. 清华牛人总结的数据分析笔记
  14. 一款免安装、多平台兼容的 拾色器(Color Picker)
  15. MiL.k x Bithumb x Yanolja宣布建立三方商务及市场营销合作关系
  16. Linux操作系统学习笔记【入门必备】
  17. imagemagick安装问题
  18. Apache SkyWalking入门学习笔记
  19. 区块链走向何方,或许从美国证劵史可以得到答案
  20. Lunch Time

热门文章

  1. js实现下雪雪花特效
  2. Anaconda3安装tensorflow踩坑记录
  3. 综合布线系统工程中计算机插座的标识符号是,TD是综合布线系统工程中计算机插座的标识符号。...
  4. 利用Python实现PDF转文本,就是如此简单!
  5. 操作系统-复习-考题预测及解析-期中考试
  6. 基于广义线性组合的Capon波束形成原理介绍及MATLAB实现
  7. 3分钟,把你的安卓手机/平板变成你的电脑副屏
  8. 复盘:智能座舱系列文五- 它的3种交互方式之隐式交互
  9. 抖音:对比去年6月蓝V账号数量增长44.6倍 投稿量增长211倍
  10. 使用程序自动调用ANSYS并运行命令流文件