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() for f in fs: if f._state in _DONE_STATES: done.add(f) else: not_done.add(f) return (done, not_done) with _base._AcquireFutures(fs): (done, not_done) = _partition_futures(fs) if done: return (done, not_done) waiter = _GreenWaiter() for f in fs: f._waiters.append(waiter) waiter.event.wait(timeout) for f in fs: f._waiters.remove(waiter) with _base._AcquireFutures(fs): return _partition_futures(fs)
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() for f in fs: if f._state in _DONE_STATES: done.add(f) else: not_done.add(f) return (done, not_done) with _base._AcquireFutures(fs): (done, not_done) = _partition_futures(fs) if done: return (done, not_done) waiter = _GreenWaiter() for f in fs: f._waiters.append(waiter) waiter.event.wait(timeout) for f in fs: f._waiters.remove(waiter) with _base._AcquireFutures(fs): return _partition_futures(fs)
def _wait_for_any_green(fs, timeout=None): eu.check_for_eventlet(RuntimeError('Eventlet is needed to wait on' ' green futures')) with _base._AcquireFutures(fs): done, not_done = _partition_futures(fs) if done: return _base.DoneAndNotDoneFutures(done, not_done) waiter = _GreenWaiter() for f in fs: f._waiters.append(waiter) waiter.event.wait(timeout) for f in fs: f._waiters.remove(waiter) with _base._AcquireFutures(fs): done, not_done = _partition_futures(fs) return _base.DoneAndNotDoneFutures(done, not_done)