Show More
@@ -1,56 +1,71 b'' | |||
|
1 | 1 | How IPython Works |
|
2 | 2 | ================= |
|
3 | 3 | |
|
4 | 4 | Terminal IPython |
|
5 | 5 | ---------------- |
|
6 | 6 | |
|
7 | 7 | When you type ``ipython``, you get the original IPython interface, running in |
|
8 | 8 | the terminal. It does something like this:: |
|
9 | 9 | |
|
10 | 10 | while True: |
|
11 | 11 | code = input(">>> ") |
|
12 | 12 | exec(code) |
|
13 | 13 | |
|
14 | 14 | Of course, it's much more complicated, because it has to deal with multi-line |
|
15 | 15 | code, tab completion using :mod:`readline`, magic commands, and so on. But the |
|
16 | 16 | model is like that: prompt the user for some code, and when they've entered it, |
|
17 | 17 | exec it in the same process. |
|
18 | 18 | |
|
19 | 19 | The IPython Kernel |
|
20 | 20 | ------------------ |
|
21 | 21 | |
|
22 | 22 | All the other interfaces—the Notebook, the Qt console, ``ipython console`` in |
|
23 | 23 | the terminal, and third party interfaces—use the IPython Kernel. This is a |
|
24 | 24 | separate process which is responsible for running user code, and things like |
|
25 | 25 | computing possible completions. Frontends communicate with it using JSON |
|
26 | 26 | messages sent over ZeroMQ sockets; the protocol they use is described in |
|
27 | 27 | :doc:`messaging`. |
|
28 | 28 | |
|
29 | 29 | The core execution machinery for the kernel is shared with terminal IPython: |
|
30 | 30 | |
|
31 | 31 | .. image:: figs/ipy_kernel_and_terminal.png |
|
32 | 32 | |
|
33 | 33 | A kernel process can be connected to more than one frontend simultaneously. In |
|
34 | 34 | this case, the different frontends will have access to the same variables. |
|
35 | 35 | |
|
36 | 36 | .. TODO: Diagram illustrating this? |
|
37 | 37 | |
|
38 | 38 | This design was intended to allow easy development of different frontends based |
|
39 | 39 | on the same kernel, but it also made it possible to support new languages in the |
|
40 | 40 | same frontends, by developing kernels in those languages, and we are refining |
|
41 | 41 | IPython to make that more practical. |
|
42 | 42 | |
|
43 | 43 | Today, there are two ways to develop a kernel for another language. Wrapper |
|
44 | 44 | kernels reuse the communications machinery from IPython, and implement only the |
|
45 | 45 | core execution part. Native kernels implement execution and communications in |
|
46 | 46 | the target language: |
|
47 | 47 | |
|
48 | 48 | .. image:: figs/other_kernels.png |
|
49 | 49 | |
|
50 | 50 | .. seealso:: |
|
51 | 51 | |
|
52 | 52 | :doc:`kernels` |
|
53 | 53 | |
|
54 | 54 | :doc:`wrapperkernels` |
|
55 | 55 | |
|
56 | ||
|
56 | Notebooks | |
|
57 | --------- | |
|
58 | ||
|
59 | The Notebook frontend does something extra. In addition to running your code, it | |
|
60 | stores code and output, together with markdown notes, in an editable document | |
|
61 | called a notebook. When you save it, this is sent from your browser to the | |
|
62 | notebook server, which saves it on disk as a JSON file with a ``.ipynb`` | |
|
63 | extension. | |
|
64 | ||
|
65 | .. TODO: Diagram of how these pieces fit together. | |
|
66 | ||
|
67 | The notebook server, not the kernel, is responsible for saving and loading | |
|
68 | notebooks, so you can edit notebooks even if you don't have the kernel for that | |
|
69 | language—you just won't be able to run code. The kernel doesn't know anything | |
|
70 | about the notebook document: it just gets sent cells of code to execute when the | |
|
71 | user runs them. |
General Comments 0
You need to be logged in to leave comments.
Login now