3.4. 了解Jupyter内核¶
内核(Kernel) 是Jupyter Notebook背后的计算引擎,它负责执行你输入的代码, 并将结果返回给Notebook。不同的编程语言有不同的内核,比如Python的IPython内核、R的IRKernel等。 当你发现Notebook中的变量或模块状态变得混乱,或者代码执行出错且难以找到原因时, 重启内核可能是一个解决问题的有效方法。
Jupyter Notebook 是一个交互式计算环境,它可以让你在浏览器中编写和运行代码。 它支持多种编程语言,如 Python、R 和 Julia。在 Jupyter Notebook 中, 内核是一个与编辑环境交互的后台进程。内核负责处理代码的执行和输出结果的显示。
当你在 Jupyter Notebook 中创建一个新的笔记本时,你可以选择一个特定的内核去运行你的代码。 每个内核与一个特定的编程语言相关联,它会解释和执行你在代码单元格中编写的代码。 当你执行一个代码单元格时,该内核会接收代码并计算结果,然后将结果返回给 Notebook 显示。
理解内核的概念对于在 Jupyter Notebook 中有效地编写和运行代码非常重要。 通过使用不同的内核,你可以在同一个笔记本中混合使用多种编程语言。 这为你提供了灵活性和便利性,因为你可以根据需要选择最适合你的编程语言来解决问题。
3.4.1. 介绍¶
每个 notebook 都有一个 kernel。当执行一个单元内的代码的时候,就是采用 kernel 来运行代码, 并将结果输出显示在单元内。同时 kernel 的状态会保留,并且不止局限在一个单元内, 即一个单元内的变量或者导入的第三方库,也是可以在另一个单元内使用的,并不是相互独立的。
研究所计算平台可使用的内核参见 平台提供的运行时内核说明 。
某种程度来说,notebook 可以看做是一个脚本文件,除了增加了更多输入方式,比如说明文字、图片等等。
这里介绍 kernel 的这种特性,分别在两个单元内输入两段代码,
第一个单元内时导入 numpy 并定义函数 square()
,而第二个单元内就调用了这个函数 square()
,
并成功运行输出结果。如 图 3.5 所示。

图 3.5 代码示例¶
大部分情况下都是自顶向下的运行每个单元的代码,但这并不绝对,实际上是可以重新回到任意一个单元,
再次执行这段代码,因此每个单元左侧的 In [ ]
就非常有用,其数字就告诉了我们它是运行的第几个单元。
此外,我们还可以重新运行整个 kernel,这里介绍菜单 Kernel 中的几个选项:
Restart :重新开始 kernel,这会清空 notebook 中所有的变量定义
Restart & Clear Output: 和第一个选项相同,但还会将所有输出都清除
Restart & Run All: 重新开始,并且会自动从头开始运行所有的单元内的代码
通常如果 kernel 陷入某个单元的代码运行中,希望停止该代码的运行,则可以采用 Interrupt 选项。
3.4.2. 内核重启¶
重启内核的原因多种多样,但主要可以归纳为以下几点:
清理环境:长时间使用Notebook,可能会加载很多库、定义很多变量和函数,这些都会占用内存资源。 有时,为了避免潜在的命名冲突或内存泄漏,重启内核可以“重置”环境,让一切从头开始。
解决依赖冲突:如果你在使用Notebook的过程中,升级了某个库或者安装了新库, 而这些变化影响了之前的代码执行,重启内核可以帮助你应用新的库版本或依赖关系。
摆脱无限循环:如果不小心写了一个无限循环,Notebook可能会变得无响应。此时, 重启内核可以中断这个循环,让Notebook恢复工作。
假设你在使用Jupyter Notebook进行数据分析时,遇到了一个奇怪的错误, 而且这个错误似乎与你之前加载的某个库有关。此时,你可以尝试通过重启内核来解决问题:
保存你的工作:首先,确保你已经保存了Notebook中的所有重要数据和代码。
重启内核:按照前面的方法,重启Jupyter Notebook的内核。
重新加载库:重启内核后,重新执行那些用于加载库的代码单元。
重新执行代码:逐一或批量重新执行那些之前已经运行过的代码单元,观察是否还会出现同样的错误。
分析问题:如果问题解决了,那么很可能是之前某个库的状态或版本问题导致的。如果问题仍然存在, 那么你可能需要进一步检查你的代码或寻求其他帮助。