【问题标题】:IPython Language Kernel Implementation in ErlangErlang 中的 IPython 语言内核实现
【发布时间】:2014-05-11 23:59:11
【问题描述】:

我目前正在为 IPython 构建 Erlang 语言内核后端,并且正在控制台中对其进行测试。

我的工作:

  • 启动 ipython 控制台和 erlang 内核
  • Erlang 内核读取 kernel.json 文件的内容,该文件包含 zmq 的所有端口号
  • 使用 erlzmq2 库为 shellheartbeatcontroliopub 套接字创建 zmq 绑定。
  • 创建函数来解析来自 IPython 的消息
  • 为心跳服务器创建一个进程以在其上运行并向 IPython 返回消息
  • 为 Shell Socket 创建了一个进程来接收和响应以下消息
    • kernel_info_request -> kernel_info_reply
    • execute_request -> execute_reply
  • 此外,iopub 套接字发送这些消息
    • 状态
    • pyout

如果你还在我身边,这一切都会奏效。 第一个 IPython In[1]: 提示出现,我可以输入代码,将其发送到后端并从 ipython 接收 execute_request 消息。

但是,我的问题是在我收到 execute_request 的这一系列事件之后:

  • 向 IPython 发送忙碌状态
  • 执行代码并捕获输出字符串
  • 向 IPython 发送 pyout 消息
  • 向 IPython 发送了 execute_reply
  • 向 IPython 发送空闲状态

发送这些消息后,没有任何反应。我不再收到来自 IPython 的消息,代码执行也没有输出到控制台,也没有出现新的提示,要求用户提供更多输入。

我只是想知道我是否以正确的顺序发送消息,还是发送正确的消息?

【问题讨论】:

  • 首先:这太棒了!代码是否已经在某处可用?第二:您使用的是哪个版本的 IPython?
  • 嗨,该代码尚不可用:(。它很快就会可用(一旦我清理它重构一些代码)......也许下周:)。我正在使用 IPython 2.0.0-dev 和消息协议版本 4.1
  • 如果您想知道,IErlang 现在可以通过github.com/robbielynch/ierlang获得

标签: python erlang ipython zeromq


【解决方案1】:

我已经为此工作了几个星期,但我没有找到控制台问题的解决方案。

但是,我发现了一种允许多个输入的解决方法。

首先我没有使用我之前使用的语言配置文件。这个语言配置文件只是告诉 IPython 使用什么内核以及使用什么加密字符串。

接下来,我开始使用笔记本而不是控制台。希望它能提供更多的投入。而且,确实如此。 :)

要使用指定的内核启动 ipython,我使用了以下命令:

ipython2 notebook --KernelManager.kernel_cmd='["/usr/lib/erlang/bin/escript", "ipython_kernel.erl", "{connection_file}"]' --Session.key="" --Session.keyfile=""

在上述命令中,我指定了内核命令,并提供以下内容:

  • 运行我的 erlang 内核的可执行文件的位置
  • 我的内核的名称
  • 和连接文件

接下来,我将会话密钥和会话密钥文件指定为空字符串。

如果内核编写正确,它允许多个代码条目和降价到 ipyton/ierlang。

这里是早期阶段的 ierlang 示例:

我希望这篇文章可以帮助那些努力为 ipython 开发内核的人。 :)


[更新 - 2014 年 4 月 12 日]

我终于找到了问题所在。事实证明,当通过 zmq 发送 erlang 字符串(整数列表)时,它们以整数列表的形式到达 IPython 的消息解析器。

我推测,它们会自动转换为字符串,但事实并非如此。

解决方案

解决方案是编辑 IPython/kernel/zmq/session.py 文件以允许它解析 erlang 字符串。

这允许输出提示出现在控制台和 Ierlang 的笔记本版本中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-12
    • 1970-01-01
    • 2011-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-27
    相关资源
    最近更新 更多