Отправка сообщений с других языков на ядро ​​IPython

Есть ли у кого-нибудь опыт общения с ядрами IPython из-за пределов Python?

Если бы я пытался отправлять сообщения из приложения Python в ядро ​​IPython, я бы использовал API zmq.kernelmanager. Как бы то ни было, мне, очевидно, нужно будет написать собственный диспетчер ядра на другом языке, но я не могу найти информацию, которую я ищу о низкоуровневых протоколах обмена сообщениями.

Есть ли официальная спецификация или "чит-лист", который документирует структуру фактических сообщений, отправляемых по 0MQ? Эта страница описывает протокол более высокого уровня, чем то, что я ищу... Я должен вручную разделить реализацию, чтобы найти то, что я хочу?

Ответ 1

Это документ, который отчаянно нуждается в существовании, но реализация проводного протокола реализована в одном объекте, поэтому он должен "Слишком сложно оттуда оттуда. 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":{}}
]