使用pymongo配合flask和gunicorn使用的时候触发以下错误信息:

[2017-09-19 15:20: ] [25780] [CRITICAL] WORKER TIMEOUT (pid:25896)
/home/for4c/projects/excel.d/venv3.4/lib/python3.4/site-packages/pymongo/topology.py:145: UserWarning: MongoClient opened before fork. Create MongoClient with connect=False, or create client after forking. See PyMongo's documentation for details: http://api.mongodb.org/python/current/faq.html#pymongo-fork-safe>
"MongoClient opened before fork. Create MongoClient "
[2017-09-19 15:20:10 +0800] [25896] [INFO] Worker exiting (pid: 25896)

提示的意思是MongoClient在fork之前开启了,官方文档指出:

PyMongo is not fork-safe. Care must be taken when using instances of MongoClient with fork(). Specifically, instances of MongoClient must not be copied from a parent process to a child process.

fork是启动新进程的方法,并且由于PyMongo不是进程安全的,所以不应该将该实例从父进程中复制到子进程当中。在这个flask应用中,flask使用gunicorn作为网关接口,在启动的时候会启动一个主进程和多个子进程,也就是master/workers,这个时候就出现了MongoClient实例在进程之间的传递。

为了解决这个问题,在实例化MongoClient对象的时候要加上connect=False参数。app.mongo = MongoClient(host='0.0.0.0',port=27017,connect=False)。

最新文章

  1. mac系统小记
  2. 二十二、Java基础--------GUI入门
  3. 玩转Android Camera开发(二):使用TextureView和SurfaceTexture预览Camera 基础拍照demo
  4. (旧)子数涵数·Flash——影片剪辑的事件操作
  5. Intent官方教程(2)Intent的两种类型
  6. treap模版代码
  7. SQL SERVER系统表
  8. web.xml中servlet的配置
  9. Android Studio does not point to a valid jvm
  10. CentOS7 安装zookeeper
  11. The Swift Programming Language-官方教程精译Swift(6)控制流--Control Flow
  12. MySql主从配置实践及其优势浅谈
  13. FileTable初体验
  14. [JavaScript]自执行函数
  15. springboot快速开发(简单web)
  16. 三问助你Fundebug
  17. PHP更改自动加载的顺序
  18. codeforces gym 101164 K Cutting 字符串hash
  19. 用华为eNSP模拟器配置Hybrid、Trunk和Access三种链路类型端口
  20. 关于go语言中的WaitGroup

热门文章

  1. STM32遇到的问题
  2. 19,django组件之contenttype(一)
  3. 110Balanced Binary Tree
  4. hihocoder1014 : Trie树
  5. springboot 入门2 开发环境与生产环境采用不同配置问题
  6. wireshark 安装
  7. oracle 用户被锁定解锁方法
  8. 宝石TD迷宫设计器
  9. Android学习记录(6)—将java中的多线程下载移植到Android中(即多线程下载在Android中的使用)③
  10. Canvas 剪切图片