【问题标题】:Sending messages from other languages to an IPython kernel将消息从其他语言发送到 IPython 内核
【发布时间】:2013-04-26 16:07:49
【问题描述】:

有没有人有任何从 Python 外部与 IPython 内核通信的经验?

如果我尝试将消息从 Python 应用程序发送到 IPython 内核,我会使用 zmq.kernelmanager API。事实上,我显然需要用另一种语言编写自己的内核管理器,但我找不到我正在寻找的有关低级消息传递协议的信息。

是否有官方规范或“备忘单”记录了通过 0MQ 发送的实际消息的结构? This page 描述了比我正在寻找的更高级别的协议...我是否必须手动拆分实现才能找到我想要的?

【问题讨论】:

标签: python protocols messaging ipython zeromq


【解决方案1】:

这是一个迫切需要存在的文档,但是有线协议的实现是在single object 中实现的,因此从那里理解应该不会太难。您链接的message spec doc 涵盖了每个字段的应用程序级内容,但不包括它实际上是如何通过 zeromq 序列化的。假设您有一条消息,如该文档中所述,有线格式非常简单。它是一个至少有六个部分的多部分 zeromq 消息:

  • 前导消息部分是 zeromq 路由标识(零对多)
  • 后跟一个分隔符消息,字节为<IDS|MSG>
  • 消息的 hmac digest(如果禁用身份验证,则为空字符串 ''
  • header
  • parent_header
  • metadata
  • content

headerparent_headermetadatacontent 都在消息传递文档中进行了描述 - 这些是字典,并使用当前使用的任何序列化序列化为字节。 IPython 中的默认值是 utf8 编码的 JSON,但允许任意序列化(msgpack 是最常见的非默认值)。文档中尚未描述的是 digest,用于身份验证。这是邮件的MD5 HMAC Digest。摘要的密钥位于连接文件的key 字段中。 HMAC 摘要使用的“消息”是序列化标头、parent_header、元数据和内容的字节的串联,按照通过线路发送的相同顺序。

您可以通过指定配置值来禁用消息签名

Session.key = ''

到代码中与 IPython 相关的部分,在这种情况下,摘要字段将始终为空字符串 ''。我建议在开始时这样做,这样您就可以先解决实现中更有趣的部分。

这是一个示例执行请求及其实际由 IPython 发送的回复。

请求:

[
  <IDS|MSG>
  6ea6b213262402cc1ad3c1d3e342a9f6
  {"date":"2013-04-27T23:22:13.522049","username":"minrk","session":"5b03b89a-93c9-4113-bb85-17ba57233711","msg_id":"c6d0f85e-fc25-4f1e-84e1-3d706b615393","msg_type":"execute_request"}
  {}
  {}
  {"user_variables":[],"code":"1\n","silent":false,"allow_stdin":true,"store_history":true,"user_expressions":{}}
]

及其回复:

[
  5b03b89a-93c9-4113-bb85-17ba57233711
  <IDS|MSG>
  47d1052f6e8f333d18480938ca91719b
  {"date":"2013-04-27T23:22:13.528239","username":"kernel","session":"d7eb303b-d2d0-4723-aef2-738545a8da11","msg_id":"9ed1d332-398c-4132-b203-1e7bf8fed712","msg_type":"execute_reply"}
  {"date":"2013-04-27T23:22:13.522049","username":"minrk","session":"5b03b89a-93c9-4113-bb85-17ba57233711","msg_id":"c6d0f85e-fc25-4f1e-84e1-3d706b615393","msg_type":"execute_request"}
  {"dependencies_met":true,"engine":"645fb29f-37ab-40c9-bc01-b7fbfe3c2112","status":"ok","started":"2013-04-27T23:22:13.524114"}
  {"status":"ok","execution_count":2,"user_variables":{},"payload":[],"user_expressions":{}}
]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-15
    • 2022-01-09
    • 2014-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-09
    相关资源
    最近更新 更多