Show More
@@ -51,7 +51,7 b' Application: :class:`~IPython.config.application.Application`' | |||||
51 | Applications always have a `log` attribute that is a configured Logger. |
|
51 | Applications always have a `log` attribute that is a configured Logger. | |
52 | This allows centralized logging configuration per-application. |
|
52 | This allows centralized logging configuration per-application. | |
53 |
|
53 | |||
54 |
Co |
|
54 | Configurable: :class:`~IPython.config.configurable.Configurable` | |
55 | A configurable is a regular Python class that serves as a base class for |
|
55 | A configurable is a regular Python class that serves as a base class for | |
56 | all main classes in an application. The |
|
56 | all main classes in an application. The | |
57 | :class:`~IPython.config.configurable.Configurable` base class is |
|
57 | :class:`~IPython.config.configurable.Configurable` base class is | |
@@ -121,10 +121,10 b' attributes on it. All you have to know is:' | |||||
121 |
|
121 | |||
122 | The answers to these two questions are provided by the various |
|
122 | The answers to these two questions are provided by the various | |
123 | :class:`~IPython.config.configurable.Configurable` subclasses that an |
|
123 | :class:`~IPython.config.configurable.Configurable` subclasses that an | |
124 |
application uses. Let's look at how this would work for a simple co |
|
124 | application uses. Let's look at how this would work for a simple configurable | |
125 | subclass:: |
|
125 | subclass:: | |
126 |
|
126 | |||
127 |
# Sample co |
|
127 | # Sample configurable: | |
128 | from IPython.config.configurable import Configurable |
|
128 | from IPython.config.configurable import Configurable | |
129 | from IPython.utils.traitlets import Int, Float, Unicode, Bool |
|
129 | from IPython.utils.traitlets import Int, Float, Unicode, Bool | |
130 |
|
130 |
@@ -27,13 +27,17 b' Release 0.11' | |||||
27 | * Prepare to refactor IPython's core by creating a new component and |
|
27 | * Prepare to refactor IPython's core by creating a new component and | |
28 | application system (done). |
|
28 | application system (done). | |
29 |
|
29 | |||
30 |
* Start to refactor IPython's core by turning everything into co |
|
30 | * Start to refactor IPython's core by turning everything into configurables | |
31 | (started). |
|
31 | (mostly done). | |
32 |
|
32 | |||
33 | Release 0.12 |
|
33 | Release 0.12 | |
34 | ------------ |
|
34 | ------------ | |
35 |
|
35 | |||
36 |
* Continue to refactor IPython's core by turning everything into co |
|
36 | * Continue to refactor IPython's core by turning everything into configurables. | |
|
37 | ||||
|
38 | * Merge draft html notebook (started). | |||
|
39 | ||||
|
40 | * Add two-process Terminal frontend using ZMQ architecture. | |||
37 |
|
41 | |||
38 |
|
42 | |||
39 | Major areas of work |
|
43 | Major areas of work | |
@@ -44,78 +48,48 b' Refactoring the main IPython core' | |||||
44 |
|
48 | |||
45 | During the summer of 2009, we began refactoring IPython's core. The main |
|
49 | During the summer of 2009, we began refactoring IPython's core. The main | |
46 | thrust in this work was to make the IPython core into a set of loosely coupled |
|
50 | thrust in this work was to make the IPython core into a set of loosely coupled | |
47 |
components. The base co |
|
51 | components. The base configurable class for this is | |
48 |
:class:`IPython.core.co |
|
52 | :class:`IPython.core.configurable.Configurable`. This section outlines the | |
49 | this work. |
|
53 | status of this work. | |
50 |
|
54 | |||
51 |
Parts of the IPython core that have been turned into co |
|
55 | Parts of the IPython core that have been turned into configurables: | |
52 |
|
56 | |||
53 |
* The main :class:`~IPython.core.i |
|
57 | * The main :class:`~IPython.core.interactiveshell.InteractiveShell` class. | |
54 | * The aliases (:mod:`IPython.core.alias`). |
|
58 | * The aliases (:mod:`IPython.core.alias`). | |
|
59 | * History management (:mod:`IPython.core.history`). | |||
|
60 | * Plugins (:mod:`IPython.core.plugin`). | |||
55 | * The display and builtin traps (:mod:`IPython.core.display_trap` and |
|
61 | * The display and builtin traps (:mod:`IPython.core.display_trap` and | |
56 | :mod:`IPython.core.builtin_trap`). |
|
62 | :mod:`IPython.core.builtin_trap`). | |
57 | * The prefilter machinery (:mod:`IPython.core.prefilter`). |
|
63 | * The prefilter machinery (:mod:`IPython.core.prefilter`). | |
58 |
|
64 | |||
59 |
Parts of the IPythoncore that still need to be |
|
65 | Parts of the IPython core that still need to be Configurable: | |
60 |
|
66 | |||
61 | * Magics. |
|
67 | * Magics. | |
62 | * Input and output history management. |
|
|||
63 | * Prompts. |
|
68 | * Prompts. | |
64 | * Tab completers. |
|
69 | * Tab completers. | |
65 | * Logging. |
|
|||
66 | * Exception handling. |
|
70 | * Exception handling. | |
67 | * Anything else. |
|
71 | * Anything else. | |
68 |
|
72 | |||
69 |
Process management for :mod:`IPython. |
|
73 | Process management for :mod:`IPython.parallel` | |
70 | -------------------------------------------- |
|
74 | -------------------------------------------- | |
71 |
|
75 | |||
72 |
A |
|
76 | A few things need to be done to improve how processes are started | |
73 | up and managed for the parallel computing side of IPython: |
|
77 | up and managed for the parallel computing side of IPython: | |
74 |
|
78 | |||
75 | * All of the processes need to use the new configuration system, components |
|
79 | * Improve the SSH launcher so it is at least back to the levels of 0.10.2 | |
76 | and application. |
|
80 | * We need to add support for other batch systems (LSF, Condor, etc.). | |
77 | * We need to add support for other batch systems. |
|
|||
78 |
|
||||
79 | Performance problems |
|
|||
80 | -------------------- |
|
|||
81 |
|
||||
82 | Currently, we have a number of performance issues in :mod:`IPython.kernel`: |
|
|||
83 |
|
||||
84 | * The controller stores a large amount of state in Python dictionaries. Under |
|
|||
85 | heavy usage, these dicts with get very large, causing memory usage problems. |
|
|||
86 | We need to develop more scalable solutions to this problem. This will also |
|
|||
87 | help the controller to be more fault tolerant. |
|
|||
88 |
|
81 | |||
89 | * We currently don't have a good way of handling large objects in the |
|
|||
90 | controller. The biggest problem is that because we don't have any way of |
|
|||
91 | streaming objects, we get lots of temporary copies in the low-level buffers. |
|
|||
92 | We need to implement a better serialization approach and true streaming |
|
|||
93 | support. |
|
|||
94 |
|
||||
95 | * The controller currently unpickles and repickles objects. We need to use the |
|
|||
96 | [push|pull]_serialized methods instead. |
|
|||
97 |
|
||||
98 | * Currently the controller is a bottleneck. The best approach for this is to |
|
|||
99 | separate the controller itself into multiple processes, one for the core |
|
|||
100 | controller and one each for the controller interfaces. |
|
|||
101 |
|
82 | |||
102 | Porting to 3.0 |
|
83 | Porting to 3.0 | |
103 | ============== |
|
84 | ============== | |
104 |
|
85 | |||
105 | There are no definite plans for porting of IPython to Python 3. The major |
|
86 | Dropping 2.5 support was a major step towards working with Python 3 due to | |
106 | issue is the dependency on Twisted framework for the networking/threading |
|
87 | future syntax support in 2.6. IPython 0.11 requires 2.6 now, so 0.10.2 will | |
107 | stuff. It is possible that it the traditional IPython interactive console |
|
88 | be the last IPython release that supports Python 2.5. | |
108 | could be ported more easily since it has no such dependency. Here are a few |
|
89 | ||
109 | things that will need to be considered when doing such a port especially |
|
90 | We currently have a `separate repo <https://github.com/ipython/ipython-py3k>`_ | |
110 | if we want to have a codebase that works directly on both 2.x and 3.x. |
|
91 | tracking IPython development that works with Python 3. The core of IPython does | |
111 |
|
92 | work, but the parallel computing code in :mod:`IPython.parallel` does not yet | ||
112 | 1. The syntax for exceptions changed (PEP 3110). The old `except exc, var` |
|
93 | work in Python 3, though the only major dependency of the parallel code, pyzmq, | |
113 | changed to `except exc as var`. At last count there was 78 occurrences of this |
|
94 | does work on Python 3. | |
114 | usage in the code base. This is a particularly problematic issue, because it's |
|
95 | ||
115 | not easy to implement it in a 2.5-compatible way. |
|
|||
116 |
|
||||
117 | Because it is quite difficult to support simultaneously Python 2.5 and 3.x, we |
|
|||
118 | will likely at some point put out a release that requires strictly 2.6 and |
|
|||
119 | abandons 2.5 compatibility. This will then allow us to port the code to using |
|
|||
120 | :func:`print` as a function, `except exc as var` syntax, etc. But as of |
|
|||
121 | version 0.11 at least, we will retain Python 2.5 compatibility. |
|
General Comments 0
You need to be logged in to leave comments.
Login now