2013-04-26 32 views
12

Có ai có kinh nghiệm giao tiếp với hạt nhân IPython từ bên ngoài Python không?Gửi tin nhắn từ các ngôn ngữ khác đến hạt nhân IPython

Nếu tôi đang cố gửi thư từ ứng dụng Python đến hạt nhân IPython, tôi sẽ sử dụng API zmq.kernelmanager. Vì nó là, tôi rõ ràng sẽ cần phải viết trình quản lý hạt nhân của riêng tôi bằng ngôn ngữ khác, nhưng tôi không thể tìm thấy thông tin mà tôi đang tìm kiếm về các giao thức nhắn tin mức thấp.

Có thông số chính thức hay 'trang lừa' ghi lại cấu trúc của thư thực được gửi qua 0MQ không? This page mô tả giao thức cấp cao hơn so với những gì tôi đang tìm kiếm ... Tôi có phải tự tách cài đặt để tìm những gì tôi muốn không?

+0

Có một bài đăng blog, liên kết cho câu hỏi này, mô tả làm thế nào để thực hiện một http ipython kernel: // stackoverflow. com/questions/16240747/send-messages-from-other-languages-to-an-ipython-kernel – dirceusemighini

+1

http://andrew.gibiansky.com/blog/ipython/ipython-kernels/ là những gì @dirceusemighini đang nói đến. –

Trả lời

13

Đây là tài liệu cần thiết để tồn tại, nhưng việc triển khai giao thức dây được thực hiện trong một single object, do đó không quá khó để bẻ khóa từ đó. Các message spec doc bạn liên kết bao gồm các nội dung cấp ứng dụng của mỗi lĩnh vực, nhưng không phải như thế nào nó thực sự được tuần tự hóa trên zeromq. Giả sử bạn có một mesage, như được mô tả trong tài liệu đó, định dạng dây là khá đơn giản. Đó là một thông điệp nhiều phần dữ liệu zeromq của ít nhất sáu phần:

  • Các bộ phận nhắn hàng đầu là những bản sắc định tuyến zeromq (zero-to-many)
  • Đây là theo sau là một thông điệp delimiter, với các byte <IDS|MSG>
  • HMAC digest của thông điệp (một chuỗi rỗng '' nếu xác thực bị vô hiệu hóa)
  • header
  • parent_header
  • metadata
  • content

header, parent_header, metadata, và content đều được mô tả trong tin nhắn doc - đây là những từ điển, và tuần tự để byte với bất cứ điều gì serialization hiện đang được sử dụng. Mặc định trong IPython là JSON được mã hóa utf8, nhưng cho phép tuần tự hóa tùy ý (msgpack là không phổ biến nhất mặc định). Chưa được mô tả trong tài liệu là digest, được sử dụng để xác thực. Đây là một thông báo MD5 HMAC Digest. Chìa khóa cho thông báo được tìm thấy trong trường key của tệp kết nối. 'Thông báo' được sử dụng bởi thông báo HMAC là nối các byte của tiêu đề được tuần tự hóa, parent_header, siêu dữ liệu và nội dung theo thứ tự được gửi qua dây.

Bạn có thể vô hiệu hóa ký thông điệp bằng cách xác định giá trị cấu hình

Session.key = '' 

đến các bộ phận IPython liên quan đến mã của bạn, trong trường hợp lĩnh vực tiêu hóa sẽ luôn là một chuỗi rỗng ''. Tôi sẽ khuyên bạn nên làm điều này trong khi bắt đầu, vì vậy bạn có thể làm việc ra các phần thú vị hơn của việc thực hiện đầu tiên.

Dưới đây là một yêu cầu thực thi mẫu và trả lời của nó thực sự được gửi bởi IPython.

Yêu cầu:

[ 
    <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":{}} 
] 

và trả lời nó:

[ 
    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":{}} 
] 
Các vấn đề liên quan