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))
 | 
			
		||||
    if not green_fs:
 | 
			
		||||
        return tuple(_futures.wait(fs, timeout=timeout,
 | 
			
		||||
                                   return_when=_futures.FIRST_COMPLETED))
 | 
			
		||||
        return _futures.wait(fs,
 | 
			
		||||
                             timeout=timeout,
 | 
			
		||||
                             return_when=_futures.FIRST_COMPLETED)
 | 
			
		||||
    else:
 | 
			
		||||
        non_green_fs = len(fs) - green_fs
 | 
			
		||||
        if non_green_fs:
 | 
			
		||||
@@ -81,9 +82,6 @@ class _GreenWaiter(object):
 | 
			
		||||
        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):
 | 
			
		||||
    done = set()
 | 
			
		||||
    not_done = set()
 | 
			
		||||
@@ -92,12 +90,16 @@ def _wait_for_any_green(fs, timeout=None):
 | 
			
		||||
            done.add(f)
 | 
			
		||||
        else:
 | 
			
		||||
            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):
 | 
			
		||||
        (done, not_done) = _partition_futures(fs)
 | 
			
		||||
        done, not_done = _partition_futures(fs)
 | 
			
		||||
        if done:
 | 
			
		||||
            return (done, not_done)
 | 
			
		||||
            return _base.DoneAndNotDoneFutures(done, not_done)
 | 
			
		||||
        waiter = _GreenWaiter()
 | 
			
		||||
        for f in fs:
 | 
			
		||||
            f._waiters.append(waiter)
 | 
			
		||||
@@ -107,4 +109,5 @@ def _wait_for_any_green(fs, timeout=None):
 | 
			
		||||
        f._waiters.remove(waiter)
 | 
			
		||||
 | 
			
		||||
    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