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

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

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

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

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

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

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

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

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

如何打开源文件:

在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莫名崩溃的原因及解决方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • jupyter lab的目录调整及设置默认浏览器为chrome的方法

    1. Jupyter 默认目录调整 首先要找到jupyter生成的配置文件 jupyter_notebook_config.py .如果没有,在 anaconda prompt 中用如下命令生成一个: jupyter notebook --generate-config 打开文件jupyter_notebook_config.py,在文件中找到 ## The directory to use for notebooks and kernels. #c.NotebookApp.notebook_d

  • jupyter notebook 多行输出实例

    很多时候在一个cell中,我们不只有一个print,但默认只有一个print,所以我们进行多行输出,加入代码 from IPython.core.interactiveshell import InteractiveShell InteractiveShell.ast_node_interactivity = "all" 补充知识:jupyter notebook 输出中文PDF的简便方法哦 一个简单的 Jupyter notebook 输出中文PDF文件的方法 直接浏览器虚拟打印 

  • jupyter notebook 参数传递给shell命令行实例

    我就废话不多说了,大家看代码吧! dataset = ["el","tv"] model = ["model"] stride = [32,64,256,512] for m in model: for d in dataset: for s in stride: print(f"{m} {d} {s}") c = f"tail -n3 N{m}_hp_emb{s}_adam_{d}_log_1.txt"

  • 调整Jupyter notebook的启动目录操作

    1. 在控制台输入以下命令,检查Jupyter notebook的安装目录 jupyter notebook --generate-config 如: C:\Users\Administrator>jupyter notebook --generate-config 例如得到配置文件的地址为: C:\Users\Administrator\.jupyter\jupyter_notebook_config.py with default config? [y/N]n # 选择不替换为默认配置 2.

  • 解决jupyter notebook显示不全出现框框或者乱码问题

    在开头加入以下设置即可解决 %matplotlib inline plt.rcParams['figure.figsize'] = (12.0, 8.0) # 调整大小,可根据自实际情况进行设置 plt.rcParams['image.interpolation'] = 'nearest' plt.rcParams['image.cmap'] = 'gray' plt.rcParams['font.sans-serif']=['SimHei'] # 下面这两个是设置乱码的 plt.rcParam

  • jupyter 实现notebook中显示完整的行和列

    jupyter notebook中设置显示最大行和列及浮点数,在head观察行和列时不会省略 jupyter notebook中df.head(50)经常会因为数据太大,行列自动省略,观察数据时不爽! pd.set_option('max_columns',1000) pd.set_option('max_row',300) pd.set_option('display.float_format', lambda x: '%.5f' % x) 欢迎使用Markdown编辑器写博客 补充知识:Ju

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

    最近在使用 Python notebook时老是出现python崩溃的现象,如下图,诱发的原因是"KERNELBASE.dll",异常代码报"40000015". 折腾半天,发现我启动notebook时是用自定义startup.bat方式方式启动的,bat文件的内容为 start C:\Anaconda3\python.exe "C:/Anaconda3/Scripts/jupyter-notebook-script.py" 平时双击这个bat文

  • jupyter notebook 调用环境中的Keras或者pytorch教程

    1.安装插件,在非虚拟环境 conda install nb_conda conda install ipykernel 2.安装ipykernel包,在虚拟环境下安装 在Windows使用下面命令:激活环境并安装插件(这里的 Keras 是我的环境名,安装的时候换成自己的环境名即可) activate keras conda install ipykernel 在linux 使用下面的命令: 激活环境并安装插件 source activate keras conda install ipyke

  • 解决Android加壳过程中mprotect调用失败的原因分析

    目录 问题原由 调用mprotect修改内存失败的现象 mprotect调用失败的原因分析 两种可行的解决方案 小结 问题原由 函数抽取壳是当前最为流行的DEX加壳方式之一,这种加壳方式的主要流程包含两个步骤:一.将DEX中需要保护的函数指令置空(即抽取函数体):二.在应用启动的过程中,HOOK 类的加载过程,比如ClassLinker::LoadMethod函数,然后及时回填指令. 笔者在实现抽取壳的过程中遇到了一个问题,即在步骤二回填指令之前,需要先调用mprotect将目标内存设置为“可写

  • 无法使用pip命令安装python第三方库的原因及解决方法

    再dos中无法使用pip,命令主要是没有发现这个命令.我们先找到这个命令的位置,一般是在python里面的Scripts文件夹里面.我们可以把dos切换到对应的文件夹,再使用pip命令就可以了. 如果你在使用pip命令安装Python第三方库时也出现下面这样. 这是我在安装requests库时 我们发现pip命令无法使用,这时我们看一下python文件夹下的Scripts文件,如下 我发现我里面有pip和easy_install,也就是我可以使用pip命令所以我们要在这个文件夹下使用pip命令

  • Python print不能立即打印的解决方式

    1.问题描述 在Python中使用print打印hello world时,终端不显示 def hello(): print("hello world!") 2.原因 因为标准输入输出stdin/stdout有缓冲区,所以使用print不能立即打印出来,作为刚接触Python的菜鸟,迷瞪了半天 3.解决方法 1)刷新缓冲区,python中是sys.stdout.flush() import sys def hello(): print("hello world!")

  • python程序输出无内容的解决方式

    问题缘由 某项目中使用python脚本方式将日志文件中的数据持续的转换格式输出到另一文件中以供其他日志分析应用使用.但是当后台运行采取重定向方式输出到某一文件时,发现并没有内容输出,命令如下: python xxx.py > xxx.log & 测试发现,当前台直接输出到终端时正常,使用后台运行重定向的方式输出到文件中时无法输出. 解决办法 发现是在程序运行时,输出有缓存,只有当程序运行结束或者缓冲区满后才会输出.因为程序是一致在运行的所以不可能等待程序结束在输出.并且要求是有实时性的所以等

  • Java中关于线程安全的三种解决方式

    三个窗口卖票的例子解决线程安全问题 问题:买票过程中,出现了重票.错票-->出现了线程的安全问题 问题出现的原因:当某个线程操作车票的过程中,尚未操作完成时,其他线程参与进来,也操作车票 如何解决:当一个线程a在操作ticket的时候,其他线程不能参与进来,知道线程a操作完ticket时,其他线程才可以开始操作ticket,这种情况即使线程a出现了阻塞,也不能被改变 在Java中,我们通过同步机制,来解决线程的安全问题.(线程安全问题的前提:有共享数据) 方式一:同步代码块 synchroniz

  • Pycharm cannot set up a python SDK问题的原因及解决方法

    目录 一.问题原因 二.解决办法 总结 一.问题原因 (如果不是第一次使用pycharm,我觉得可以跳过这一章) 我是升级以后,在用pycharm打开以前的项目就出现报错了: 很明显是环境信息配置的不正确: 在修改环境配置的时候出现了下面的报错 进入Pycharm后,打开之前的项目,打开Pycharm→file→settings→project interpreter,按照下图1选择配置之后,点击[OK]会出现报错,如图2 我的环境上有很多之前的包,所以这个地方我选择使用之前的venv环境,不敢

  • Thinkphp 在api开发中异常返回依然是html的解决方式

    现在谁不开发接口的呢?但是在接口开发过程中,报错误异常后居然返回错误的信息依然是html信息!TP官方也不知道为啥不添加,说好的为接口而生,我的解决方案也很简单,把系统的异常处理类复制出来,去掉模板相关,直接以json方式输出 下面是解决方案: 1:按照TP扩展异常的方式引用这个文件 https://www.kancloud.cn/manual/thinkphp5_1/354092 // 判断默认输出类型 // $app 是配置数组 if ($app['default_return_type']

  • 浅谈vue在html中出现{{}}的原因及解决方式

    原因: 浏览器渲染机制,解析html结构 -> 加载外部脚本和样式表文件 -> 解析并执行脚本代码 -> 构造html dom模型 -> 加载图片等外部文件 -> 页面加载完毕. 初始化vue的js写在页面底部,也就是最后才执行js脚本. 所以页面从头到尾开始渲染时,渲染到标签时,由于vue还未初始化,所以就会显示类似这样的代码 <h2>{{courseName}}</h2> 当网速很慢的时候就看得比较清楚,可能会让用户误以为bug之类的,快一点的话就

随机推荐