##// END OF EJS Templates
Start describing how IPython works
Start describing how IPython works

File last commit:

r18354:4bd9a4c3
r18354:4bd9a4c3
Show More
how_ipython_works.rst
56 lines | 1.9 KiB | text/x-rst | RstLexer
Thomas Kluyver
Start describing how IPython works
r18354 How IPython Works
=================
Terminal IPython
----------------
When you type ``ipython``, you get the original IPython interface, running in
the terminal. It does something like this::
while True:
code = input(">>> ")
exec(code)
Of course, it's much more complicated, because it has to deal with multi-line
code, tab completion using :mod:`readline`, magic commands, and so on. But the
model is like that: prompt the user for some code, and when they've entered it,
exec it in the same process.
The IPython Kernel
------------------
All the other interfaces—the Notebook, the Qt console, ``ipython console`` in
the terminal, and third party interfaces—use the IPython Kernel. This is a
separate process which is responsible for running user code, and things like
computing possible completions. Frontends communicate with it using JSON
messages sent over ZeroMQ sockets; the protocol they use is described in
:doc:`messaging`.
The core execution machinery for the kernel is shared with terminal IPython:
.. image:: figs/ipy_kernel_and_terminal.png
A kernel process can be connected to more than one frontend simultaneously. In
this case, the different frontends will have access to the same variables.
.. TODO: Diagram illustrating this?
This design was intended to allow easy development of different frontends based
on the same kernel, but it also made it possible to support new languages in the
same frontends, by developing kernels in those languages, and we are refining
IPython to make that more practical.
Today, there are two ways to develop a kernel for another language. Wrapper
kernels reuse the communications machinery from IPython, and implement only the
core execution part. Native kernels implement execution and communications in
the target language:
.. image:: figs/other_kernels.png
.. seealso::
:doc:`kernels`
:doc:`wrapperkernels`