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

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

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

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

  • Установка pymatbridge на Windows
  • Как использовать send_json с pyzmq PUB SUB
  • Как использовать транспорты inproc и ipc Zeromq?
  • Python zeromq - Несколько издателей для одного подписчика?
  • Ошибка при установке ZeroMQ
  • Python многопоточный ZeroMQ REQ-REP
  • Python Multi-Processing Question?
  • Как я мог установить hwm в шаблоне push / pull zmq?
  • One Solution collect form web for “Отправка сообщений с других языков на ядро ​​IPython”

    Это документ, который отчаянно нуждается в существовании, но реализация проводного протокола реализована в одном объекте , поэтому от него не должно быть слишком сложно. Связанный с сообщением спецификатор документов охватывает содержимое на уровне приложения каждого поля, но не то, как он фактически сериализуется над zeromq. Предполагая, что у вас есть mesage, как описано в этом документе, формат проводов довольно прост. Это многочленное сообщение zeromq, состоящее как минимум из шести частей:

    • Ведущими частями сообщения являются идентификаторы маршрутизации zeromq (ноль-ко-многим)
    • За ними следует сообщение разделителя с байтами <IDS|MSG>
    • Сообщение hmac сообщения (пустая строка '' если аутентификация отключена)
    • header
    • parent_header
    • metadata
    • content

    header , parent_header header , metadata и content описаны в документе обмена сообщениями – это словари и сериализуются в байты с любой сериализацией в настоящее время. По умолчанию в IPython используется JSON с кодировкой utf8, но допускается произвольная сериализация (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":{}} ] 
    Python - лучший язык программирования в мире.