##// END OF EJS Templates
Adding the argparse module to externals.
Brian Granger -
Show More
@@ -1,107 +1,104 b''
1 .. _roadmap:
1 .. _roadmap:
2
2
3 ===================
3 ===================
4 Development roadmap
4 Development roadmap
5 ===================
5 ===================
6
6
7 .. contents::
7 .. contents::
8
8
9 IPython is an ambitious project that is still under heavy development. However, we want IPython to become useful to as many people as possible, as quickly as possible. To help us accomplish this, we are laying out a roadmap of where we are headed and what needs to happen to get there. Hopefully, this will help the IPython developers figure out the best things to work on for each upcoming release.
9 IPython is an ambitious project that is still under heavy development. However, we want IPython to become useful to as many people as possible, as quickly as possible. To help us accomplish this, we are laying out a roadmap of where we are headed and what needs to happen to get there. Hopefully, this will help the IPython developers figure out the best things to work on for each upcoming release.
10
10
11 Speaking of releases, we are going to begin releasing a new version of IPython every four weeks. We are hoping that a regular release schedule, along with a clear roadmap of where we are headed will propel the project forward.
11 Speaking of releases, we are going to begin releasing a new version of IPython every four weeks. We are hoping that a regular release schedule, along with a clear roadmap of where we are headed will propel the project forward.
12
12
13 Where are we headed
13 Where are we headed
14 ===================
14 ===================
15
15
16 Our goal with IPython is simple: to provide a *powerful*, *robust* and *easy to use* framework for parallel computing. While there are other secondary goals you will hear us talking about at various times, this is the primary goal of IPython that frames the roadmap.
16 Our goal with IPython is simple: to provide a *powerful*, *robust* and *easy to use* framework for parallel computing. While there are other secondary goals you will hear us talking about at various times, this is the primary goal of IPython that frames the roadmap.
17
17
18 Steps along the way
18 Steps along the way
19 ===================
19 ===================
20
20
21 Here we describe the various things that we need to work on to accomplish this goal.
21 Here we describe the various things that we need to work on to accomplish this goal.
22
22
23 Setting up for regular release schedule
23 Setting up for regular release schedule
24 ---------------------------------------
24 ---------------------------------------
25
25
26 We would like to begin to release IPython regularly (probably a 4 week release cycle). To get ready for this, we need to revisit the development guidelines and put in information about releasing IPython.
26 We would like to begin to release IPython regularly (probably a 4 week release cycle). To get ready for this, we need to revisit the development guidelines and put in information about releasing IPython.
27
27
28 Process startup and management
28 Process startup and management
29 ------------------------------
29 ------------------------------
30
30
31 IPython is implemented using a distributed set of processes that communicate using TCP/IP network channels. Currently, users have to start each of the various processes separately using command line scripts. This is both difficult and error prone. Furthermore, there are a number of things that often need to be managed once the processes have been started, such as the sending of signals and the shutting down and cleaning up of processes.
31 IPython is implemented using a distributed set of processes that communicate using TCP/IP network channels. Currently, users have to start each of the various processes separately using command line scripts. This is both difficult and error prone. Furthermore, there are a number of things that often need to be managed once the processes have been started, such as the sending of signals and the shutting down and cleaning up of processes.
32
32
33 We need to build a system that makes it trivial for users to start and manage IPython processes. This system should have the following properties:
33 We need to build a system that makes it trivial for users to start and manage IPython processes. This system should have the following properties:
34
34
35 * It should possible to do everything through an extremely simple API that users
35 * It should possible to do everything through an extremely simple API that
36 can call from their own Python script. No shell commands should be needed.
36 users can call from their own Python script. No shell commands should be
37
37 needed.
38 * This simple API should be configured using standard .ini files.
38 * This simple API should be configured using standard .ini files.
39
39 * The system should make it possible to start processes using a number of
40 * The system should make it possible to start processes using a number of different
40 different approaches: SSH, PBS/Torque, Xgrid, Windows Server, mpirun, etc.
41 approaches: SSH, PBS/Torque, Xgrid, Windows Server, mpirun, etc.
41 * The controller and engine processes should each have a daemon for
42
42 monitoring, signaling and clean up.
43 * The controller and engine processes should each have a daemon for monitoring,
44 signaling and clean up.
45
46 * The system should be secure.
43 * The system should be secure.
47
48 * The system should work under all the major operating systems, including
44 * The system should work under all the major operating systems, including
49 Windows.
45 Windows.
50
46
51 Initial work has begun on the daemon infrastructure, and some of the needed logic is contained in the ipcluster script.
47 Initial work has begun on the daemon infrastructure, and some of the needed logic is contained in the ipcluster script.
52
48
53 Ease of use/high-level approaches to parallelism
49 Ease of use/high-level approaches to parallelism
54 ------------------------------------------------
50 ------------------------------------------------
55
51
56 While our current API for clients is well designed, we can still do a lot better in designing a user-facing API that is super simple. The main goal here is that it should take *almost no extra code* for users to get their code running in parallel. For this to be possible, we need to tie into Python's standard idioms that enable efficient coding. The biggest ones we are looking at are using context managers (i.e., Python 2.5's ``with`` statement) and decorators. Initial work on this front has begun, but more work is needed.
52 While our current API for clients is well designed, we can still do a lot better in designing a user-facing API that is super simple. The main goal here is that it should take *almost no extra code* for users to get their code running in parallel. For this to be possible, we need to tie into Python's standard idioms that enable efficient coding. The biggest ones we are looking at are using context managers (i.e., Python 2.5's ``with`` statement) and decorators. Initial work on this front has begun, but more work is needed.
57
53
58 We also need to think about new models for expressing parallelism. This is fun work as most of the foundation has already been established.
54 We also need to think about new models for expressing parallelism. This is fun work as most of the foundation has already been established.
59
55
60 Security
56 Security
61 --------
57 --------
62
58
63 Currently, IPython has no built in security or security model. Because we would like IPython to be usable on public computer systems and over wide area networks, we need to come up with a robust solution for security. Here are some of the specific things that need to be included:
59 Currently, IPython has no built in security or security model. Because we would like IPython to be usable on public computer systems and over wide area networks, we need to come up with a robust solution for security. Here are some of the specific things that need to be included:
64
60
65 * User authentication between all processes (engines, controller and clients).
61 * User authentication between all processes (engines, controller and clients).
66
67 * Optional TSL/SSL based encryption of all communication channels.
62 * Optional TSL/SSL based encryption of all communication channels.
68
69 * A good way of picking network ports so multiple users on the same system can
63 * A good way of picking network ports so multiple users on the same system can
70 run their own controller and engines without interfering with those of others.
64 run their own controller and engines without interfering with those of
71
65 others.
72 * A clear model for security that enables users to evaluate the security risks
66 * A clear model for security that enables users to evaluate the security risks
73 associated with using IPython in various manners.
67 associated with using IPython in various manners.
74
68
75 For the implementation of this, we plan on using Twisted's support for SSL and authentication. One things that we really should look at is the `Foolscap`_ network protocol, which provides many of these things out of the box.
69 For the implementation of this, we plan on using Twisted's support for SSL and authentication. One things that we really should look at is the `Foolscap`_ network protocol, which provides many of these things out of the box.
76
70
77 .. _Foolscap: http://foolscap.lothar.com/trac
71 .. _Foolscap: http://foolscap.lothar.com/trac
78
72
79 The security work needs to be done in conjunction with other network protocol stuff.
73 The security work needs to be done in conjunction with other network protocol stuff.
80
74
81 As of the 0.9 release of IPython, we are using Foolscap and we have implemented
75 As of the 0.9 release of IPython, we are using Foolscap and we have implemented
82 a full security model.
76 a full security model.
83
77
84 Latent performance issues
78 Latent performance issues
85 -------------------------
79 -------------------------
86
80
87 Currently, we have a number of performance issues that are waiting to bite users:
81 Currently, we have a number of performance issues that are waiting to bite users:
88
82
89 * The controller store a large amount of state in Python dictionaries. Under heavy
83 * The controller store a large amount of state in Python dictionaries. Under
90 usage, these dicts with get very large, causing memory usage problems. We need to
84 heavy usage, these dicts with get very large, causing memory usage problems.
91 develop more scalable solutions to this problem, such as using a sqlite database
85 We need to develop more scalable solutions to this problem, such as using a
92 to store this state. This will also help the controller to be more fault tolerant.
86 sqlite database to store this state. This will also help the controller to
93 * Currently, the client to controller connections are done through XML-RPC using
87 be more fault tolerant.
94 HTTP 1.0. This is very inefficient as XML-RPC is a very verbose protocol and
88 * Currently, the client to controller connections are done through XML-RPC
95 each request must be handled with a new connection. We need to move these network
89 using HTTP 1.0. This is very inefficient as XML-RPC is a very verbose
96 connections over to PB or Foolscap. Done!
90 protocol and each request must be handled with a new connection. We need to
97 * We currently don't have a good way of handling large objects in the controller.
91 move these network connections over to PB or Foolscap. Done!
98 The biggest problem is that because we don't have any way of streaming objects,
92 * We currently don't have a good way of handling large objects in the
99 we get lots of temporary copies in the low-level buffers. We need to implement
93 controller. The biggest problem is that because we don't have any way of
100 a better serialization approach and true streaming support.
94 streaming objects, we get lots of temporary copies in the low-level buffers.
101 * The controller currently unpickles and repickles objects. We need to use the
95 We need to implement a better serialization approach and true streaming
102 [push|pull]_serialized methods instead.
96 support.
103 * Currently the controller is a bottleneck. We need the ability to scale the
97 * The controller currently unpickles and repickles objects. We need to use the
104 controller by aggregating multiple controllers into one effective controller.
98 [push|pull]_serialized methods instead.
99 * Currently the controller is a bottleneck. We need the ability to scale the
100 controller by aggregating multiple controllers into one effective
101 controller.
105
102
106
103
107
104
General Comments 0
You need to be logged in to leave comments. Login now