Return the same namedtuple that the future module returns
Instead of converting the namedtuple that the future wait function returns into a normal tuple, just have our own internal functions use the futures namedtuple directly instead and avoid any conversion to/from that namedtuple into a normal tuple. Change-Id: I54b2595af8d58db60843195034d66a623c20277c
This commit is contained in:
committed by
Joshua Harlow
parent
3cbfd9086c
commit
f862775c22
@@ -54,8 +54,9 @@ def wait_for_any(fs, timeout=None):
|
|||||||
"""
|
"""
|
||||||
green_fs = sum(1 for f in fs if isinstance(f, futures.GreenFuture))
|
green_fs = sum(1 for f in fs if isinstance(f, futures.GreenFuture))
|
||||||
if not green_fs:
|
if not green_fs:
|
||||||
return tuple(_futures.wait(fs, timeout=timeout,
|
return _futures.wait(fs,
|
||||||
return_when=_futures.FIRST_COMPLETED))
|
timeout=timeout,
|
||||||
|
return_when=_futures.FIRST_COMPLETED)
|
||||||
else:
|
else:
|
||||||
non_green_fs = len(fs) - green_fs
|
non_green_fs = len(fs) - green_fs
|
||||||
if non_green_fs:
|
if non_green_fs:
|
||||||
@@ -81,9 +82,6 @@ class _GreenWaiter(object):
|
|||||||
self.event.set()
|
self.event.set()
|
||||||
|
|
||||||
|
|
||||||
def _wait_for_any_green(fs, timeout=None):
|
|
||||||
assert EVENTLET_AVAILABLE, 'eventlet is needed to wait on green futures'
|
|
||||||
|
|
||||||
def _partition_futures(fs):
|
def _partition_futures(fs):
|
||||||
done = set()
|
done = set()
|
||||||
not_done = set()
|
not_done = set()
|
||||||
@@ -92,12 +90,16 @@ def _wait_for_any_green(fs, timeout=None):
|
|||||||
done.add(f)
|
done.add(f)
|
||||||
else:
|
else:
|
||||||
not_done.add(f)
|
not_done.add(f)
|
||||||
return (done, not_done)
|
return done, not_done
|
||||||
|
|
||||||
|
|
||||||
|
def _wait_for_any_green(fs, timeout=None):
|
||||||
|
assert EVENTLET_AVAILABLE, 'eventlet is needed to wait on green futures'
|
||||||
|
|
||||||
with _base._AcquireFutures(fs):
|
with _base._AcquireFutures(fs):
|
||||||
(done, not_done) = _partition_futures(fs)
|
done, not_done = _partition_futures(fs)
|
||||||
if done:
|
if done:
|
||||||
return (done, not_done)
|
return _base.DoneAndNotDoneFutures(done, not_done)
|
||||||
waiter = _GreenWaiter()
|
waiter = _GreenWaiter()
|
||||||
for f in fs:
|
for f in fs:
|
||||||
f._waiters.append(waiter)
|
f._waiters.append(waiter)
|
||||||
@@ -107,4 +109,5 @@ def _wait_for_any_green(fs, timeout=None):
|
|||||||
f._waiters.remove(waiter)
|
f._waiters.remove(waiter)
|
||||||
|
|
||||||
with _base._AcquireFutures(fs):
|
with _base._AcquireFutures(fs):
|
||||||
return _partition_futures(fs)
|
done, not_done = _partition_futures(fs)
|
||||||
|
return _base.DoneAndNotDoneFutures(done, not_done)
|
||||||
|
|||||||
Reference in New Issue
Block a user