OLD | NEW |
---|---|
1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 # Copyright (c) 2012 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 import sys | 5 import sys |
6 | 6 |
7 _no_value = object() | 7 _no_value = object() |
8 | 8 |
9 | 9 |
10 def Collect(futures): | |
11 '''Creates a Future which returns a list of results from each Future in | |
12 |future|. | |
Yoyo Zhou
2014/02/04 21:42:13
futures
not at google - send to devlin
2014/02/04 21:57:13
Done.
| |
13 ''' | |
14 return Future(delegate=Gettable(lambda: [f.Get() for f in futures])) | |
15 | |
16 | |
10 class Gettable(object): | 17 class Gettable(object): |
11 '''Allows a Future to accept a callable as a delegate. Wraps |f| in a .Get | 18 '''Allows a Future to accept a callable as a delegate. Wraps |f| in a .Get |
12 interface required by Future. | 19 interface required by Future. |
13 ''' | 20 ''' |
14 def __init__(self, f, *args): | 21 def __init__(self, f, *args): |
15 self._g = lambda: f(*args) | 22 self._g = lambda: f(*args) |
16 def Get(self): | 23 def Get(self): |
17 return self._g() | 24 return self._g() |
18 | 25 |
19 | 26 |
(...skipping 19 matching lines...) Expand all Loading... | |
39 try: | 46 try: |
40 self._value = self._delegate.Get() | 47 self._value = self._delegate.Get() |
41 return self._value | 48 return self._value |
42 except: | 49 except: |
43 self._exc_info = sys.exc_info() | 50 self._exc_info = sys.exc_info() |
44 self._Raise() | 51 self._Raise() |
45 | 52 |
46 def _Raise(self): | 53 def _Raise(self): |
47 exc_info = self._exc_info | 54 exc_info = self._exc_info |
48 raise exc_info[0], exc_info[1], exc_info[2] | 55 raise exc_info[0], exc_info[1], exc_info[2] |
OLD | NEW |