函数调用顺序flask的app.py的run-->werkzeug的serving.py的run_simple-->调用werkzeug的debug的__init__.py里的类DebuggedApplication,这里类有两个dict对象:self.frames = {}
self.tracebacks = {}。用来存放异常栈信息。

因为flask启动时调用run,所以就会初始化这个类DebuggedApplication,创建两个dict  frames和tracebacks,记录异常栈信息,直到下次应用重启,重新初始化这个类,和这两个对象。

因此在生产环境如果开启debug模式,并且存在错误逻辑导致异常,在不断被触发的情况下,设备早晚会内存不足,而导致应用被kill掉。

可以使用sys.getsizeof(self.frames)查看对象大小。直接修改werkzeug文件,调试--意思是说,修改三方包werkzeug的源代码,打印出异常栈的信息(print sys.getsizeof(self.frames)),这样本地调试(使用pycharm等工具)flask的时候,就可以在控制台看到这个异常栈的大小信息。错误持续发生,这个dict对象就会越来越大

再说下debug模式的守护进程,默认情况下,即app.run()不设置多进程启动的话,不开启debug,只有一个进程,过来的请求,一个一个处理,没有并发能力,顺序执行。在debug模式下,会先启动一个守护进程,然后启动主进程。主进程关掉以后,守护进程自然就关掉了;但是守护进程关掉了,不影响主进程的运行.

守护进程的作用:

简单来说就是,本来并没有 daemon thread,为了简化程序员的工作,让他们不用去记录和管理那些后台线程,创造了一个 daemon thread 的概念。这个概念唯一的作用就是,当你把一个线程设置为 daemon,它会随主线程的退出而退出。关键作用有三个:

  1. background task
  2. only useful when the main program is running
  3. ok to kill

被设置为 daemon 的线程应当满足这三条。第一点需要说一下,比如一个线程需要用 join 执行,那么 daemon 就没有意义了,因为程序总是需要等待它完成才能继续执行。

Some threads do background tasks, like sending keepalive packets, or performing periodic garbage collection, or whatever. These are only useful when the main program is running, and it's okay to kill them off once the other, non-daemon, threads have exited.

Without daemon threads, you'd have to keep track of them, and tell them to exit, before your program can completely quit. By setting them as daemon threads, you can let them run and forget about them, and when your program quits, any daemon threads are killed automatically.

Daemon线程会被粗鲁的直接结束,它所使用的资源(已打开文件、数据库事务等)无法被合理的释放。因此如果需要线程被优雅的结束,请设置为非Daemon线程,并使用合理的信号方法,如事件Event。会不会产生内存泄露?

参考:

1、https://laike9m.com/blog/daemon-is-not-daemon-but-what-is-it,97/

2、https://stackoverflow.com/questions/190010/daemon-threads-explanation

3、https://www.cnblogs.com/xfiver/p/5189732.html

flask使用debug模式时,存在错误时,会占用设备内存直至服务重启才释放;debug模式会开启一个守护进程(daemon process)...相关推荐

  1. 在启动 sql2000 服务时提示: 错误 1609 由于登录失败无法启动服务

    服务是否动,在我的电脑是右击,--管理--服务.查看是否都已经启动! 控制面板-管理工具-服务

  2. pxe安装linux dhcp失败,利用PXE自动化安装Centos时启动DHCP服务时遇到错误,请求大佬指教...

    @利用PXE自动化安装Centos时启动DHCP服务时遇到错误,请求大佬指教 [root@localhost ~]# systemctl start dhcpd.service Job for dhc ...

  3. 使用 DiskGenius 执行硬盘分区时提示”格式化时出现错误“怎么解决

    使用 DiskGenius 执行硬盘分区时提示"格式化时出现错误"怎么解决 对于出现使用 DiskGenius 分区工具格式化硬盘分区时提示"格式化时出现错误" ...

  4. IBM p系列小型机日常维护及故障排除时常用命令(检查IBM设备状态汇总)

    1. 确认所在主机及系统版本 通过#hostname.#oslevel确认所在主机后,再进行后续操作 2.运行lsdev 命令配置各种参数,所列各种设备状态都应为Available. #lsdev – ...

  5. java mail 抄送多用户,JavaMail 发送邮件,收件人为多人,抄送多人。其中包含收件人邮箱错误时的处理...

    1.给客户做一个发邮件的功能.收件人和抄送人可能为单个人,也可能为多个人.但是当收件人或抄送人中某一个邮箱的格式错误时,整个邮件发送就会出错停止发送.但我还需要给那些其余的人发邮件,该怎么办? 2.解 ...

  6. JavaMail 发送邮件,收件人为多人,抄送多人。其中包含收件人邮箱错误时的处理

    1.给客户做一个发邮件的功能.收件人和抄送人可能为单个人,也可能为多个人.但是当收件人或抄送人中某一个邮箱的格式错误时,整个邮件发送就会出错停止发送.但我还需要给那些其余的人发邮件,该怎么办? 2.解 ...

  7. CMake编译VS工程,生成解决方案时遇到错误:error MSB3073: 命令“setlocal”

    一.问题描述 CMake编译ZXing-cpp,编译成功后,打开项目,x86(win32)平台生成解决方案成功,但在x64平台,debug模式下报错:error MSB3073: 命令"se ...

  8. 无法访问D盘,执行页内操作时的错误

    打开D盘后出现"无法访问D:/,执行页内操作时的错误"怎么办? 既便D盘有病毒也不会出现这种状况,初步判断是D: 分区表错误,用系统安装光盘开机进入纯DOS下的修复模式中用 CHK ...

  9. C#调用WebService出现“基础连接已经关闭:接收时发生错误”错误

    问题描述:C#通过调用WebService,实现ORACLE 数据库的远程备份,当备份数据量到达180G以上时,出现"基础连接已经关闭:接收时发生错误"错误,导致数据备份失败. 注 ...

最新文章

  1. 在线作图|在线做Unifrac PCoA分析
  2. 应用按home键无最近应用
  3. 【机器学习算法专题(蓄力计划)】十二、机器学习中KNN算法
  4. php 从字符中随机挑一个数,php 对中文字符串的处理- 随机取出指定个数的汉字...
  5. Android工程中R.java文件的重新生成——注意资源文件的错误
  6. WIN7情况下VMWARE虚构机中Microsoft Windows XP Professional 2002 Service Pack2与win7共享文件的编制:
  7. C语言(CED)查找最接近的元素(分治法/二分查找):在一个非降序列中,查找与给定值最接近的元素。(递归实现)
  8. MySQL 数据备份与还原
  9. java jstl foreach用法_JSTL 中c:forEach使用
  10. chrome怎么调用硬件_浏览器发展简史——IE帝国是如何被chrome打败的?
  11. NLP基础—3.文本表示
  12. 中美线径对照表_导线截面与线径对照表
  13. pdf打印机如何加入背景
  14. IP地址介绍,子网划分(VLSM),构造超网(CIDR) 详解
  15. java把一个文件转化为byte字节_java把一个文件转化为byte字节
  16. 网络黑市规模达千亿元 信息泄露成最大安全威胁
  17. wex5 教程之 图文讲解 Cloudx5一键部署
  18. 汉语拼音的模糊音扩展(用于搜索纠错)
  19. 未来的应用为什么需要安全沙箱
  20. FlexRay 总线详细介绍

热门文章

  1. linux下搭建python 机器学习环境
  2. 玩“剪刀石头布“的脑机!密歇根大学开发由大脑意识精密控制的假肢
  3. 问题:AttributeError: module 'tensorflow' has no attribute 'gfile'
  4. VR社交应用程序vTime支持Oculus Touch
  5. UE4用音乐音效,各种声音都有,比较全了
  6. 亚信科技CTO欧阳晔博士:5G网络助推边缘AI|MEET 2022
  7. 好强一个Julia!CSV数据读取,性能最高多出R、Python 22倍
  8. 波士顿动力机器狗半夜遛弯儿惊呆路人,还配合拍照,网友:想到了《黑镜》...
  9. 完胜BERT!谷歌NLP预训练利器:小模型也有高精度,单个GPU就能训练 | 代码开源...
  10. 中国芯片研究再获国际顶会最佳论文提名!清华魏少军、刘雷波团队出品