Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(12)

Side by Side Diff: build/android/pylib/utils/parallelizer.py

Issue 434193002: [Android] Parallelize provision_devices.py. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 # Copyright 2014 The Chromium Authors. All rights reserved. 1 # Copyright 2014 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 """ Wrapper that allows method execution in parallel. 5 """ Wrapper that allows method execution in parallel.
6 6
7 This class wraps a list of objects of the same type, emulates their 7 This class wraps a list of objects of the same type, emulates their
8 interface, and executes any functions called on the objects in parallel 8 interface, and executes any functions called on the objects in parallel
9 in ReraiserThreads. 9 in ReraiserThreads.
10 10
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
148 timeout: Same as |pFinish|. 148 timeout: Same as |pFinish|.
149 Returns: 149 Returns:
150 A list of the results, in order of the provided devices. 150 A list of the results, in order of the provided devices.
151 Raises: 151 Raises:
152 Any exception raised by any of the called functions. 152 Any exception raised by any of the called functions.
153 """ 153 """
154 self._assertNoShadow('pGet') 154 self._assertNoShadow('pGet')
155 self.pFinish(timeout) 155 self.pFinish(timeout)
156 return self._objs 156 return self._objs
157 157
158 def pMap(self, f, *args, **kwargs):
159 """Map a function across the current wrapped objects in parallel.
160
161 This calls f(o, *args, **kwargs) for each o in the set of wrapped objects.
162
163 Note that this call is asynchronous. Call pFinish on the return value to
164 block until the call finishes.
165
166 Args:
167 f: The function to call.
168 args: The positional args to pass to f.
169 kwargs: The keyword args to pass to f.
170 Returns:
171 A Parallelizer wrapping the ReraiserThreadGroup running the map in
172 parallel.
173 """
174 self._assertNoShadow('pMap')
175 r = type(self)(self._orig_objs)
176 for d, o in zip(self._orig_objs, self._objs):
177 # TODO(jbudorick): XXX REMOVE BEFORE COMMITTING
jbudorick 2014/08/15 17:41:47 This will be gone in the next patchset, fwiw.
178 print '%s(%s)' % (f.__name__, d)
179 r._objs = reraiser_thread.ReraiserThreadGroup(
180 [reraiser_thread.ReraiserThread(
181 f, args=tuple([o] + list(args)), kwargs=kwargs,
182 name='%s(%s)' % (f.__name__, d))
183 for d, o in zip(self._orig_objs, self._objs)])
184 r._objs.StartAll() # pylint: disable=W0212
185 return r
186
158 def _assertNoShadow(self, attr_name): 187 def _assertNoShadow(self, attr_name):
159 """Ensures that |attr_name| isn't shadowing part of the wrapped obejcts. 188 """Ensures that |attr_name| isn't shadowing part of the wrapped obejcts.
160 189
161 If the wrapped objects _do_ have an |attr_name| attribute, it will be 190 If the wrapped objects _do_ have an |attr_name| attribute, it will be
162 inaccessible to clients. 191 inaccessible to clients.
163 192
164 Args: 193 Args:
165 attr_name: The attribute to check. 194 attr_name: The attribute to check.
166 Raises: 195 Raises:
167 AssertionError if the wrapped objects have an attribute named 'attr_name' 196 AssertionError if the wrapped objects have an attribute named 'attr_name'
(...skipping 19 matching lines...) Expand all
187 Returns: 216 Returns:
188 A Parallelizer emulating the value returned from calling |self| with 217 A Parallelizer emulating the value returned from calling |self| with
189 |args| and |kwargs|. 218 |args| and |kwargs|.
190 Raises: 219 Raises:
191 AttributeError if the wrapped objects aren't callable. 220 AttributeError if the wrapped objects aren't callable.
192 """ 221 """
193 r = super(SyncParallelizer, self).__call__(*args, **kwargs) 222 r = super(SyncParallelizer, self).__call__(*args, **kwargs)
194 r.pFinish(None) 223 r.pFinish(None)
195 return r 224 return r
196 225
226 #override
227 def pMap(self, f, *args, **kwargs):
228 """Map a function across the current wrapped objects in parallel.
229
230 This calls f(o, *args, **kwargs) for each o in the set of wrapped objects.
231
232 Note that this call is synchronous.
233
234 Args:
235 f: The function to call.
236 args: The positional args to pass to f.
237 kwargs: The keyword args to pass to f.
238 Returns:
239 A Parallelizer wrapping the ReraiserThreadGroup running the map in
240 parallel.
241 """
242 r = super(SyncParallelizer, self).pMap(f, *args, **kwargs)
243 r.pFinish(None)
244 return r
245
OLDNEW
« build/android/pylib/device_settings.py ('K') | « build/android/pylib/device_settings.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698