Show More
@@ -38,7 +38,7 b' import ast' | |||||
38 | import re |
|
38 | import re | |
39 |
|
39 | |||
40 | from IPython.core.error import UsageError |
|
40 | from IPython.core.error import UsageError | |
41 |
from IPython.core.magic import Magics, magics_class, line_magic, |
|
41 | from IPython.core.magic import Magics, magics_class, line_magic, cell_magic | |
42 | from IPython.testing.skipdoctest import skip_doctest |
|
42 | from IPython.testing.skipdoctest import skip_doctest | |
43 |
|
43 | |||
44 | #----------------------------------------------------------------------------- |
|
44 | #----------------------------------------------------------------------------- | |
@@ -98,8 +98,46 b' class ParallelMagics(Magics):' | |||||
98 | result.display_outputs() |
|
98 | result.display_outputs() | |
99 |
|
99 | |||
100 | @skip_doctest |
|
100 | @skip_doctest | |
101 |
@line_ |
|
101 | @line_magic | |
102 |
def px(self, |
|
102 | def px(self, parameter_s=''): | |
|
103 | """Executes the given python command in parallel. | |||
|
104 | ||||
|
105 | To use this a :class:`DirectView` instance must be created | |||
|
106 | and then activated by calling its :meth:`activate` method. | |||
|
107 | ||||
|
108 | Then you can do the following:: | |||
|
109 | ||||
|
110 | In [24]: %px a = os.getpid() | |||
|
111 | Parallel execution on engine(s): all | |||
|
112 | ||||
|
113 | In [25]: %px print a | |||
|
114 | [stdout:0] 1234 | |||
|
115 | [stdout:1] 1235 | |||
|
116 | [stdout:2] 1236 | |||
|
117 | [stdout:3] 1237 | |||
|
118 | """ | |||
|
119 | return self.parallel_execute(parameter_s) | |||
|
120 | ||||
|
121 | def parallel_execute(self, cell, block=None, groupby='type'): | |||
|
122 | """implementation used by %px and %%parallel""" | |||
|
123 | ||||
|
124 | if self.active_view is None: | |||
|
125 | raise UsageError(NO_ACTIVE_VIEW) | |||
|
126 | ||||
|
127 | # defaults: | |||
|
128 | block = self.active_view.block if block is None else block | |||
|
129 | ||||
|
130 | base = "Parallel" if block else "Async parallel" | |||
|
131 | print base + " execution on engine(s): %s" % self.active_view.targets | |||
|
132 | ||||
|
133 | result = self.active_view.execute(cell, silent=False, block=False) | |||
|
134 | if block: | |||
|
135 | result.get() | |||
|
136 | result.display_outputs(groupby) | |||
|
137 | ||||
|
138 | @skip_doctest | |||
|
139 | @cell_magic | |||
|
140 | def parallel(self, line='', cell=None): | |||
103 | """Executes the given python command in parallel. |
|
141 | """Executes the given python command in parallel. | |
104 |
|
142 | |||
105 | Cell magic usage: |
|
143 | Cell magic usage: | |
@@ -134,8 +172,8 b' class ParallelMagics(Magics):' | |||||
134 |
|
172 | |||
135 | Then you can do the following:: |
|
173 | Then you can do the following:: | |
136 |
|
174 | |||
137 |
In [24]: % |
|
175 | In [24]: %%parallel --noblock a = os.getpid() | |
138 |
|
|
176 | Async parallel execution on engine(s): all | |
139 |
|
177 | |||
140 | In [25]: %px print a |
|
178 | In [25]: %px print a | |
141 | [stdout:0] 1234 |
|
179 | [stdout:0] 1234 | |
@@ -143,40 +181,25 b' class ParallelMagics(Magics):' | |||||
143 | [stdout:2] 1236 |
|
181 | [stdout:2] 1236 | |
144 | [stdout:3] 1237 |
|
182 | [stdout:3] 1237 | |
145 | """ |
|
183 | """ | |
146 |
|
||||
147 | if self.active_view is None: |
|
|||
148 | raise UsageError(NO_ACTIVE_VIEW) |
|
|||
149 |
|
184 | |||
150 | # defaults: |
|
185 | block = None | |
151 | block = self.active_view.block |
|
|||
152 | groupby = 'type' |
|
186 | groupby = 'type' | |
153 |
|
187 | # as a cell magic, we accept args | ||
154 | if cell is None: |
|
188 | opts, _ = self.parse_options(line, 'oe', 'group-outputs=', 'block', 'noblock') | |
155 | # line magic |
|
189 | ||
156 | cell = line |
|
190 | if 'group-outputs' in opts: | |
157 | else: |
|
191 | groupby = opts['group-outputs'] | |
158 | # as a cell magic, we accept args |
|
192 | elif 'o' in opts: | |
159 | opts, _ = self.parse_options(line, 'oe', 'group-outputs=', 'block', 'noblock') |
|
193 | groupby = 'order' | |
160 |
|
194 | elif 'e' in opts: | ||
161 | if 'group-outputs' in opts: |
|
195 | groupby = 'engine' | |
162 | groupby = opts['group-outputs'] |
|
|||
163 | elif 'o' in opts: |
|
|||
164 | groupby = 'order' |
|
|||
165 | elif 'e' in opts: |
|
|||
166 | groupby = 'engine' |
|
|||
167 |
|
196 | |||
168 |
|
|
197 | if 'block' in opts: | |
169 |
|
|
198 | block = True | |
170 |
|
|
199 | elif 'noblock' in opts: | |
171 |
|
|
200 | block = False | |
172 |
|
201 | |||
173 | base = "Parallel" if self.active_view.block else "Async parallel" |
|
202 | return self.parallel_execute(cell, block=block, groupby=groupby) | |
174 | print base + " execution on engine(s): %s" % self.active_view.targets |
|
|||
175 |
|
||||
176 | result = self.active_view.execute(cell, silent=False, block=False) |
|
|||
177 | if block: |
|
|||
178 | result.get() |
|
|||
179 | result.display_outputs(groupby) |
|
|||
180 |
|
203 | |||
181 | @skip_doctest |
|
204 | @skip_doctest | |
182 | @line_magic |
|
205 | @line_magic |
General Comments 0
You need to be logged in to leave comments.
Login now