使用Jupyter Notebook为什么会kernel died?

举报
山海之光 发表于 2020/06/14 20:07:12 2020/06/14
【摘要】 1. 什么是kernel?Python是一种解释型语言,由python解释器来解释一行,并执行一行。Python源文件通常用.py为扩展名,当源文件被解释器加载或者显式地进行字节码编译的时候会被编译成字节码,字节码会被保存为.pyc 或.pyo扩展名的文件,具体是哪个扩展名,取决于解释器的类型和调用解释器的方式。python有五种常用的Python解释器:(1)CPython当从Python...

1. 什么是kernel?

Python是一种解释型语言,由python解释器来解释一行,并执行一行。

Python源文件通常用.py为扩展名,当源文件被解释器加载或者显式地进行字节码编译的时候会被编译成字节码,字节码会被保存为.pyc 或.pyo扩展名的文件,具体是哪个扩展名,取决于解释器的类型和调用解释器的方式。

python有五种常用的Python解释器:

(1)CPython

当从Python官方网站下载并安装好Python2.7后,就直接获得了一个官方版本的解释器:Cpython,这个解释器是用C语言开发的,所以叫CPython,在命名行下运行python,就是启动CPython解释器,CPython是使用最广的Python解释器。在命令行下输入python,看到">>>",其实就是启动了CPython解释器

(2)IPython

IPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的,好比很多国产浏览器虽然外观不同,但内核其实是调用了IE。Jupyter Notebook就是使用IPython解释器。

(3)PyPy

PyPy是另一个Python解释器,它的目标是执行速度,PyPy采用JIT技术,对Python代码进行动态编译,所以可以显着提高Python代码的执行速度。

(4)Jython

Jython是运行在Java平台上的Python解释器,可以直接把Python代码编译成Java字节码执行。

JPython的优势有:

只要有 Java 虚拟机,就能运行 Jython

拥有访问 Java 包与类库的能力

为 Java 开发环境提供了脚本引擎

能够很容易的测试 Java 类库

提供访问 Java 原生异常处理的能力

继承了 JavaBeans 特性和内省能力

鼓励 Python 到 Java 的开发(反之亦然)

GUI 开发人员可以访问 Java 的 AWT/Swing 库

利用了 Java 原生垃圾收集器(CPython 未实现此功能)

(5)IronPython

IronPython和Jython类似,只不过IronPython是运行在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。

 

2. IPython kernel与Jupyter Notebook的关系

先看下图了解Jupyter Notebook的架构

图片.png

用户在浏览器里写代码,点击运行后,代码从浏览器发送给Web服务器(tornado),接着从Web服务器发送消息到Kernel(python)执行代码,在Kernel中执行代码产生的输出/错误会被发送给Web服务器,接着发往给浏览器,用户于是看到输出,这就是Notebook的工作原理。

再看一下上图中最右边的部分,可以看到Notebook Server和Kernel之间采用ZeroMQ进行通信,和大多数多进程系统一样,Server和Kernel之间通过心跳机制来监测双方是否还live,整个系统才能保持正常运作。心跳机制的实现方式是定期发一条消息给对方,如果收到对方回复就知道对方还live,如何等了一段时间没收到就认为对方died。

如果Server将Kernel判定为died了,真实情况有两种:

(1)Kernel这个进程由于执行出错,被操作系统杀掉了,确实died了;

(2)    Kernel还活着,只是通信被阻塞了,Server在有限的时间内没有收到回应,于是Server认为Kernel死了,其实真实情况是kernel并没有死,只是没被检测到还活着。


那么,如果你在使用Notebook时经常碰到kernel died,如何解决呢?

对应以上两种情况,就有两种解决办法:

(1)    检测代码,避免出现内存溢出的错误,因为碰到这种错误,进程无法自愈,只能由操作系统将其杀掉;

(2)    延长心跳机制的等待时间,降低误判进程已死的可能性。




【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。