def wait(future: Future):
    """Wait future object finished.

    :param future: Future object generated by run_in_executor*()
    """
    sem = BoundedSemaphore()
    sem.acquire()
    future.add_done_callback(
        partial(lambda future, sem: sem.release(), sem=sem))
    with sem:
        return
Ejemplo n.º 2
0
 def __init__(self, *args, **kwargs):
     super(ContextStackManagerEventletMixin, self).__init__(*args, **kwargs)
     try:
         from eventlet.corolocal import local
         from eventlet.semaphore import BoundedSemaphore
     except ImportError:
         raise RuntimeError('the eventlet library is required for %s' %
                            self.__class__.__name__)
     self._coroutine_context = local()
     self._contexts.append(self._coroutine_context)
     self._coroutine_lock = BoundedSemaphore()
def wait_all(futures: List[Future]):
    """Wait all futures done

    :param futures: Futures list
    """
    sem = BoundedSemaphore(len(futures))
    for future in futures:
        sem.acquire()
        future.add_done_callback(
            partial(lambda future, sem: sem.release(), sem=sem))

    while True:
        try:
            sem.release(blocking=False)
            sem.acquire()
            eventlet.sleep(0.05)
        except ValueError:
            break