jupyter notebook 使用过程中python莫名崩溃的原因及解决方式


Posted in Python onApril 10, 2020

最近在使用 Python notebook时老是出现python崩溃的现象,如下图,诱发的原因是“KERNELBASE.dll”,异常代码报“40000015”。

jupyter notebook 使用过程中python莫名崩溃的原因及解决方式

折腾半天,发现我启动notebook时是用自定义startup.bat方式方式启动的,bat文件的内容为

start C:\Anaconda3\python.exe "C:/Anaconda3/Scripts/jupyter-notebook-script.py"

平时双击这个bat文件就行了,如果报这个莫名的错误,是因为权限不对,需要用管理员方式运行,如图,问题解决!

jupyter notebook 使用过程中python莫名崩溃的原因及解决方式

补充知识:jupyter notebook占用内存空间过大打不开的解决办法(包括但不限于爬虫造成的)

jupyter notebook由于超过内存限制而“锁死”的解决
这两天用爬虫爬数据的时候由于print了大量的爬取内容,让notebook内存溢出停止运行,连带着localhost:8888也崩溃了。Google Chrome的处理机制应该是杀掉内存溢出的页面,所以localhost:8888刷新一下就恢复了。

jupyter notebook 使用过程中python莫名崩溃的原因及解决方式

但是!我的code找不回来了!不知道是什么机制,在文件里看到的大小只有不到45MB,但是一旦从localhost:8888里面打开,(用任务管理器看的)Chrome占用的内存就远远超过这个数字,一直飙升到3GB的时候再次弹出来内存不足的提示,同时页面被杀掉。用pycharm尝试更是失败,比Chrome还吃内存。

jupyter notebook 使用过程中python莫名崩溃的原因及解决方式

在经历了各种尝试,上网搜了也没有发现相关情况之后,自己偶然发现了解决办法:

如何打开源文件:

在ipynb文件的地方选择打开方式,用Chrome浏览器打开,页面的观感类似于网页源码,内容是json格式的。

我能想到的几种解决办法:

第一种是笨办法(核心思想:只要能够打开源文件就可以把需要的东西复制下来),把重要的代码复制出来,比如到txt文件里面,再把格式用的一些字符去掉,如果代码量不是很多可以这样做;

这是一定能成功的办法,就是麻烦了一些,就不多说了。

第二种是重新构造一个json文件(核心思想:既然我已经知道ipynb本质是json就可以仿造构建一个可以打开的ipynb),导致问题的只是一个block,所以把有问题的block之外的所有block信息复制到一个txt文件,再重命名成ipynb,用jupyter notebook解析出来即可(甚至还可以直接继续运行);

实际可行性:我是用的第二种办法,实测可行,简单快捷。要注意的是一定要把最末尾的ipynb格式信息复制上。知道ipynb构造之后,觉得自己也能写个网页打开ipynb的程序了(大误)

第三种思想是用Python直接读取ipynb文件,然后小心地把重要代码和结果还原。(核心思想:不管后缀名是什么,只要里面是json格式就可以用Python的json包load),这种方法一定要注意的一点是,要观察好json文件里面的构造,不要全部print!不要全部print!之前怎么死的还不长记性吗?只要一print之前内存溢出的block就全部玩儿完,就又有了一个被锁死的ipynb文件。

理论可行性:文件本身的大小只有几十MB,轻轻松松就能存下,内存溢出可能是因为print的内容在网页中占用的资源成倍增加。我没有尝试这么做,因为随时需要存档备份,小心脏受不了。

看到这儿基本上问题就应该解决了,下面补充一点问题来源和教训

前因后果:为什么会内存溢出

这是一个“雄心勃勃”的爬虫,要爬的东西很多,所以会长时间运行。由于微博的反爬做的很好,我不确定什么时候会被屏蔽,同时需要debug嘛,所以就隔一段时间print爬到的网页。另外为了观察进度还用了tqdm(非常好用,墙裂推荐),是为print的另一部分内容。时间积累了很久(大概两天多)就卡崩溃了。

经验教训:

1、执行正式文件的时候还是最好备份一下,这次出问题我的结果是保存在文件里面的,是code打不开了,由于是孤本所以还是有点慌的(主要是跟微博斗智斗勇那么多天不想再搞了)

2、可以试着在文件里面写入日志,简单的就print也没关系,这种长时间运行的程序还是需要考虑周全一点

附一个ipynb文件源文件格式示例:

内容是hello world!

{
“cells”: [
{
“cell_type”: “code”,
“execution_count”: 1,
“metadata”: {},
“outputs”: [
{
“name”: “stdout”,
“output_type”: “stream”,
“text”: [
“hello world!\n”
]
}
],
“source”: [
“print(‘hello world!')”
]
},
{
“cell_type”: “code”,
“execution_count”: null,
“metadata”: {},
“outputs”: [],
“source”: []
}
],
“metadata”: {
“kernelspec”: {
“display_name”: “Python 3”,
“language”: “python”,
“name”: “python3”
},
“language_info”: {
“codemirror_mode”: {
“name”: “ipython”,
“version”: 3
},
“file_extension”: “.py”,
“mimetype”: “text/x-python”,
“name”: “python”,
“nbconvert_exporter”: “python”,
“pygments_lexer”: “ipython3”,
“version”: “3.7.3”
}
},
“nbformat”: 4,
“nbformat_minor”: 2
}

以上这篇jupyter notebook 使用过程中python莫名崩溃的原因及解决方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python操作串口的方法
Jun 17 Python
使用paramiko远程执行命令、下发文件的实例
Oct 01 Python
使用python批量读取word文档并整理关键信息到excel表格的实例
Nov 07 Python
python模糊图片过滤的方法
Dec 14 Python
python 二维数组90度旋转的方法
Jan 28 Python
Django自定义用户表+自定义admin后台中的字段实例
Nov 18 Python
利用Python脚本批量生成SQL语句
Mar 04 Python
解决echarts中饼图标签重叠的问题
May 16 Python
python如何写出表白程序
Jun 01 Python
python 浮点数四舍五入需要注意的地方
Aug 18 Python
Django实现微信小程序支付的示例代码
Sep 03 Python
python非标准时间的转换
Jul 25 Python
jupyter lab的目录调整及设置默认浏览器为chrome的方法
Apr 10 #Python
jupyter notebook 参数传递给shell命令行实例
Apr 10 #Python
调整Jupyter notebook的启动目录操作
Apr 10 #Python
解决jupyter notebook显示不全出现框框或者乱码问题
Apr 09 #Python
jupyter 实现notebook中显示完整的行和列
Apr 09 #Python
jupyter notebook 多行输出实例
Apr 09 #Python
Python opencv相机标定实现原理及步骤详解
Apr 09 #Python
You might like
PHP实现通过正则表达式替换回调的内容标签
2015/06/15 PHP
ECSHOP完美解决Deprecated: preg_replace()报错的问题
2016/05/17 PHP
php判断str字符串是否是xml格式数据的方法示例
2017/07/26 PHP
JavaScript 反科里化 this [译]
2012/09/20 Javascript
jQuery实现form表单reset按钮重置清空表单功能
2012/12/18 Javascript
jquery 层次选择器siblings与nextAll的区别介绍
2013/08/02 Javascript
浅析jquery某一元素重复绑定的问题
2014/01/03 Javascript
Zero Clipboard实现浏览器复制到剪贴板的方法(多个复制按钮)
2016/03/24 Javascript
Nodejs 发送Post请求功能(发短信验证码例子)
2017/02/09 NodeJs
Bootstrap导航中表单简单实现代码
2017/03/06 Javascript
Node.js 异步异常的处理与domain模块解析
2017/05/10 Javascript
微信小程序多音频播放进度条问题
2018/08/28 Javascript
Vue项目中配置pug解析支持
2019/05/10 Javascript
JavaScript模块管理的简单实现方式详解
2019/06/15 Javascript
小程序识别身份证,银行卡,营业执照,驾照的实现
2019/11/05 Javascript
javascript实现蒙版与禁止页面滚动
2020/01/11 Javascript
openlayers实现地图弹窗
2020/09/25 Javascript
Vue与React的区别和优势对比
2020/12/18 Vue.js
[01:02:04]EG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
python比较两个列表大小的方法
2015/07/11 Python
教你使用python画一朵花送女朋友
2018/03/29 Python
python实现指定文件夹下的指定文件移动到指定位置
2018/09/17 Python
pandas 条件搜索返回列表的方法
2018/10/30 Python
Python搭建Spark分布式集群环境
2019/07/05 Python
Pandas之排序函数sort_values()的实现
2019/07/09 Python
python中的subprocess.Popen()使用详解
2019/12/25 Python
css3 box-sizing属性使用参考指南
2013/01/08 HTML / CSS
详解使用postMessage解决iframe跨域通信问题
2019/11/01 HTML / CSS
美国创意礼品网站:UncommonGoods
2017/02/03 全球购物
瑞士隐形眼镜和护理产品网上商店:Linsenklick
2019/10/21 全球购物
腾讯技术类校园招聘笔试试题
2014/05/06 面试题
如何通过jdbc调用存储过程
2012/04/19 面试题
什么是servlet
2012/05/08 面试题
乡镇安全生产月活动总结
2015/05/08 职场文书
原生JS封装vue Tab切换效果
2021/04/28 Vue.js
Python中的np.argmin()和np.argmax()函数用法
2021/06/02 Python