##// END OF EJS Templates
Wording tweak
Thomas Kluyver -
Show More
@@ -1,104 +1,104 b''
1 How IPython works
1 How IPython works
2 =================
2 =================
3
3
4 Terminal IPython
4 Terminal IPython
5 ----------------
5 ----------------
6
6
7 When you type ``ipython``, you get the original IPython interface, running in
7 When you type ``ipython``, you get the original IPython interface, running in
8 the terminal. It does something like this::
8 the terminal. It does something like this::
9
9
10 while True:
10 while True:
11 code = input(">>> ")
11 code = input(">>> ")
12 exec(code)
12 exec(code)
13
13
14 Of course, it's much more complicated, because it has to deal with multi-line
14 Of course, it's much more complex, because it has to deal with multi-line
15 code, tab completion using :mod:`readline`, magic commands, and so on. But the
15 code, tab completion using :mod:`readline`, magic commands, and so on. But the
16 model is like that: prompt the user for some code, and when they've entered it,
16 model is like that: prompt the user for some code, and when they've entered it,
17 exec it in the same process. This model is often called a REPL, or
17 exec it in the same process. This model is often called a REPL, or
18 Read-Eval-Print-Loop.
18 Read-Eval-Print-Loop.
19
19
20 The IPython Kernel
20 The IPython Kernel
21 ------------------
21 ------------------
22
22
23 All the other interfaces—the Notebook, the Qt console, ``ipython console`` in
23 All the other interfaces—the Notebook, the Qt console, ``ipython console`` in
24 the terminal, and third party interfaces—use the IPython Kernel. This is a
24 the terminal, and third party interfaces—use the IPython Kernel. This is a
25 separate process which is responsible for running user code, and things like
25 separate process which is responsible for running user code, and things like
26 computing possible completions. Frontends communicate with it using JSON
26 computing possible completions. Frontends communicate with it using JSON
27 messages sent over `ZeroMQ <http://zeromq.org/>`_ sockets; the protocol they use is described in
27 messages sent over `ZeroMQ <http://zeromq.org/>`_ sockets; the protocol they use is described in
28 :doc:`messaging`.
28 :doc:`messaging`.
29
29
30 The core execution machinery for the kernel is shared with terminal IPython:
30 The core execution machinery for the kernel is shared with terminal IPython:
31
31
32 .. image:: figs/ipy_kernel_and_terminal.png
32 .. image:: figs/ipy_kernel_and_terminal.png
33
33
34 A kernel process can be connected to more than one frontend simultaneously. In
34 A kernel process can be connected to more than one frontend simultaneously. In
35 this case, the different frontends will have access to the same variables.
35 this case, the different frontends will have access to the same variables.
36
36
37 .. TODO: Diagram illustrating this?
37 .. TODO: Diagram illustrating this?
38
38
39 This design was intended to allow easy development of different frontends based
39 This design was intended to allow easy development of different frontends based
40 on the same kernel, but it also made it possible to support new languages in the
40 on the same kernel, but it also made it possible to support new languages in the
41 same frontends, by developing kernels in those languages, and we are refining
41 same frontends, by developing kernels in those languages, and we are refining
42 IPython to make that more practical.
42 IPython to make that more practical.
43
43
44 Today, there are two ways to develop a kernel for another language. Wrapper
44 Today, there are two ways to develop a kernel for another language. Wrapper
45 kernels reuse the communications machinery from IPython, and implement only the
45 kernels reuse the communications machinery from IPython, and implement only the
46 core execution part. Native kernels implement execution and communications in
46 core execution part. Native kernels implement execution and communications in
47 the target language:
47 the target language:
48
48
49 .. image:: figs/other_kernels.png
49 .. image:: figs/other_kernels.png
50
50
51 Wrapper kernels are easier to write quickly for languages that have good Python
51 Wrapper kernels are easier to write quickly for languages that have good Python
52 wrappers, like `octave_kernel <https://pypi.python.org/pypi/octave_kernel>`_, or
52 wrappers, like `octave_kernel <https://pypi.python.org/pypi/octave_kernel>`_, or
53 languages where it's impractical to implement the communications machinery, like
53 languages where it's impractical to implement the communications machinery, like
54 `bash_kernel <https://pypi.python.org/pypi/bash_kernel>`_. Native kernels are
54 `bash_kernel <https://pypi.python.org/pypi/bash_kernel>`_. Native kernels are
55 likely to be better maintained by the community using them, like
55 likely to be better maintained by the community using them, like
56 `IJulia <https://github.com/JuliaLang/IJulia.jl>`_ or `IHaskell <https://github.com/gibiansky/IHaskell>`_.
56 `IJulia <https://github.com/JuliaLang/IJulia.jl>`_ or `IHaskell <https://github.com/gibiansky/IHaskell>`_.
57
57
58 .. seealso::
58 .. seealso::
59
59
60 :doc:`kernels`
60 :doc:`kernels`
61
61
62 :doc:`wrapperkernels`
62 :doc:`wrapperkernels`
63
63
64 Notebooks
64 Notebooks
65 ---------
65 ---------
66
66
67 The Notebook frontend does something extra. In addition to running your code, it
67 The Notebook frontend does something extra. In addition to running your code, it
68 stores code and output, together with markdown notes, in an editable document
68 stores code and output, together with markdown notes, in an editable document
69 called a notebook. When you save it, this is sent from your browser to the
69 called a notebook. When you save it, this is sent from your browser to the
70 notebook server, which saves it on disk as a JSON file with a ``.ipynb``
70 notebook server, which saves it on disk as a JSON file with a ``.ipynb``
71 extension.
71 extension.
72
72
73 .. image:: figs/notebook_components.png
73 .. image:: figs/notebook_components.png
74
74
75 The notebook server, not the kernel, is responsible for saving and loading
75 The notebook server, not the kernel, is responsible for saving and loading
76 notebooks, so you can edit notebooks even if you don't have the kernel for that
76 notebooks, so you can edit notebooks even if you don't have the kernel for that
77 language—you just won't be able to run code. The kernel doesn't know anything
77 language—you just won't be able to run code. The kernel doesn't know anything
78 about the notebook document: it just gets sent cells of code to execute when the
78 about the notebook document: it just gets sent cells of code to execute when the
79 user runs them.
79 user runs them.
80
80
81 Exporting to other formats
81 Exporting to other formats
82 ``````````````````````````
82 ``````````````````````````
83
83
84 The Nbconvert tool in IPython converts notebook files to other formats, such as
84 The Nbconvert tool in IPython converts notebook files to other formats, such as
85 HTML, LaTeX, or reStructuredText. This conversion goes through a series of steps:
85 HTML, LaTeX, or reStructuredText. This conversion goes through a series of steps:
86
86
87 .. image:: figs/nbconvert.png
87 .. image:: figs/nbconvert.png
88
88
89 1. Preprocessors modify the notebook in memory. E.g. ExecutePreprocessor runs
89 1. Preprocessors modify the notebook in memory. E.g. ExecutePreprocessor runs
90 the code in the notebook and updates the output.
90 the code in the notebook and updates the output.
91 2. An exporter converts the notebook to another file format. Most of the
91 2. An exporter converts the notebook to another file format. Most of the
92 exporters use templates for this.
92 exporters use templates for this.
93 3. Postprocessors work on the file produced by exporting.
93 3. Postprocessors work on the file produced by exporting.
94
94
95 The `nbviewer <http://nbviewer.ipython.org/>`_ website uses nbconvert with the
95 The `nbviewer <http://nbviewer.ipython.org/>`_ website uses nbconvert with the
96 HTML exporter. When you give it a URL, it fetches the notebook from that URL,
96 HTML exporter. When you give it a URL, it fetches the notebook from that URL,
97 converts it to HTML, and serves that HTML to you.
97 converts it to HTML, and serves that HTML to you.
98
98
99 IPython.parallel
99 IPython.parallel
100 ----------------
100 ----------------
101
101
102 IPython also includes a parallel computing framework, ``IPython.parallel``. This
102 IPython also includes a parallel computing framework, ``IPython.parallel``. This
103 allows you to control many individual engines, which are an extended version of
103 allows you to control many individual engines, which are an extended version of
104 the IPython kernel described above. For more details, see :doc:`/parallel/index`.
104 the IPython kernel described above. For more details, see :doc:`/parallel/index`.
General Comments 0
You need to be logged in to leave comments. Login now