[IPython-dev] Simple Kernel Example

Matthias BUSSONNIER bussonniermatthias at gmail.com
Thu Jan 23 17:04:16 EST 2014


Le 23 janv. 2014 à 14:47, Doug Blank a écrit :

> On Tue, Jan 21, 2014 at 12:41 PM, Doug Blank <doug.blank at gmail.com> wrote:
>> On Mon, Jan 20, 2014 at 12:01 PM, Matthias BUSSONNIER
>> <bussonniermatthias at gmail.com> wrote:
>> 
>> [snip]
>> 
>>>>> Haven't looked at your simple_kernel.py yet.
>>>> 
>>>> I have cleaned up the code some, but as far as I can tell, nothing is working.
>>> 
>>> I'm not sure sockets like passing between threads.
>>> And I think kernel side should use bind instead of connect because there is an asymetrie in req/res and pub/sub
>> 
>> Thanks for the feedback... your comments help me realize that I was
>> looking at the wrong side of the socket code as examples. I've made
>> more progress, but still looking for help on the code:
>> 
>> https://github.com/dsblank/simple_kernel
> 
> Thanks to hints given, I now have a working, simple_kernel.py.

Yeahhh


> No one
> from IPython has looked at that yet, so I don't know if there are
> issues, let alone if this is best practices. But it does work.

You were not **really** stuck :-)

> 
> Questions still:
> 
>> Some specific questions:
>> 
>> 1) Does the kernel need to handle the "ident" bytes on the front end
>> of messages before the delimiter? I see a couple of options: a) ignore
>> them, b) pass them back with responses, c) do something with them?
>> What do they represent?
> 
> It looks like the ident bytes on the front are a type of routing info
> in the form of "username.engine_id.message_id". I have ignored them so
> far. Am I losing functionality if I don't send them?

Ident might be used only to avoid replay attack, don't remember. 
Jump on hip chat and ping @minrk, he is the one with the more
 knowledge of msg spec I think. 

> 
>> 2) Could someone provide an example of a execute_request/execute_reply
>> exchange of messages. I'm having trouble getting the conversation to
>> work. Specifically, looking for how execute_reply, pyout, pyin
>> message_types are related, and which sockets they are sent on.
> 

start IPython with --debug, you should see the messages comming one going printed to stderr

> I now have that working. Errors that I had: using socket.connect() vs
> socket.bind(), not flushing the stream when sending, using wrong
> zmq.MODE (DEALER, PUB, SUB, etc) when creating the socket, missing
> JSON fields, and using the wrong socket (ie, "channel"). To solve
> these issues I put some print statements in IPython/kernel/channels.py
> when sending and recving and mirrored these details.

if you think those are needed you could put log.debug statement and open a PRs

> 
> The documentation is good, but I find that examples of the messages
> being exchanged to be useful to make it concrete. Also, it seems that
> some details are not specified in the docs.

Please open Issues on github and/or PR that how things will move forward on the doc :-)

> I'll continue to make simple_kernel better, if I receive feedback or
> add to it. Now, I'm ready to implement my real goal in C#...

Nice, is F# a derivative on C# ? 
https://github.com/BayardRock/IfSharp

Microsoft integrate IPython with visual studio, maybe they have some pieces Public in C# ? 

Is there a list of IPython  kernels somewhere ? Maybe we should create a page on the Wiki. 

You could try to run your kernel again the test-suite, it could give you hint if things are missing.

--
Matthias




More information about the IPython-dev mailing list