Jupyter是如何工作的?

如果想了解Jupyter是如何工作的,一定要阅读官方文档。
而如果阅读了官方文档,就一定会接触下面两个概念:

  1. IPython REPL
    终端Ipython的作用是REPL(Read-eval-print-loop),一种交互解释器,也就是我们能接触到的命令行终端式的那个界面。
  2. IPython kernel
    提供核心的计算功能,并且和前端进行通信,比如notebook。

Jupyter notebook 以及相关接口扩展出了其他如可视化,多媒体展示,以及其他等功能。

Terminal IPython

当你输入ipython的时候,会出现一个IPython交互接口,工作原理如下:

	while True:
		code = input(">>>")
		exec(code)

当然了,实际情况更加的复杂,因为要处理如多行代码,tab自动完成,
魔术命令
等功能,但是模型是类似的:提示用户输入信息,当输入结束后,执行在同一个进程中。这种模型叫做REPL模型,如Java的JShell,Bash等也是REPL模型的解释器。

The IPython Kernel

所有其他的接口,notebook,Qt console,ipython console 和其他第三方的接口,都与Ipython kerneli通信。

IPython Kernel是一个单独的进程来运行用户提供的代码。前端应用,比如notebook或者是qtConsole与IPython Kernel进行交流是通过zero socket进行即时信息交互。具体使用的协议在Messaging In Jupyter中有详细的描述。

IPython Kernel的核心的执行机制与terminal IPython是共享的。

kernel和terminal的协作

IPython Kernel进程可以同时连接多个前端程序,在这种情况下多个前端程序可能会访问同一个变量。

这种设计的目的是为了使不同前端的开发更加的简单,同时IPython Kernel不用做过多的变化。

如果要实现其他语言的开发呢,因为别忘了,Jupyter是支持多语言的交互文档。

有两种方式去为另外一种语言开发kernel。
第1种是Wrapper Kernel。
第2种是Native Kernel。如下图:
两种实现方式
Wrapper Kernel对于已经有很好的Python封装的语言来说会更好的实现。比如octave_kernel。对于另外一些语言实现的话就会比较困难,如bash_kernel。使用Native方式实现的语言经常会被使用他们的群体维护的更好,比如IJulia或者IHaskell。

Notebooks

notebook前端做了很多其他事情。除了运行代码之外,还存储了代码和输出,还有Mark的一些备注。当你保存它的时候,这些东西会被发送,会被浏览器发送到notebook server,后存储成JSON格式的文件在硬盘上。

notebook server 并不是kernel. 它负责存储和加载note books,所以你可以直接编辑notebook,即使你没有Kernel也是可以的,因为Kernel并不知道notebook文档的存在,它只是接收代码的片断并执行。

输出notebooks到其他格式

Nbconvert工具把notebook 文件转成其他文件格式,例如 html,latex,restructuredText。
格式转换有以下几个步骤:

文件格式转换的过程
1.预处理器修改内存中的notebook信息
2.输出器把notebook转化成另外一种模式,大多数的输出器会使用模板来进行处理。
3.后期处理器对于已经导出的文件进行处理。

Nbviewer 网站使用nbconvert 和 html exporter,当你给它一个地址的时候,它从url中获取notebook
,并把它转化成html,最后展示给你。

IPython.parallel

IPython 包括一个并行计算的框架,IPython.parallel.它允许你来控制个别的引擎,这些引擎是IPython kernel的扩展。

参考https://jupyter.readthedocs.io/en/latest/architecture/how_jupyter_ipython_work.html

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值