Esempio n. 1
0
def joinall(greenlets, timeout=None, raise_error=False, count=None):
    from gevent.queue import Queue
    queue = Queue()
    put = queue.put
    if count is None:
        count = len(greenlets)
    timeout = Timeout.start_new(timeout)
    try:
        try:
            for greenlet in greenlets:
                greenlet.rawlink(put)
            if raise_error:
                for _ in xrange(count):
                    greenlet = queue.get()
                    if not greenlet.successful():
                        raise greenlet.exception
            else:
                for _ in xrange(count):
                    queue.get()
        except:
            if sys.exc_info()[1] is not timeout:
                raise
        finally:
            for greenlet in greenlets:
                greenlet.unlink(put)
    finally:
        timeout.cancel()
Esempio n. 2
0
def joinall(greenlets, timeout=None, raise_error=False, count=None):
    from gevent.queue import Queue
    queue = Queue()
    put = queue.put
    if count is None:
        count = len(greenlets)
    timeout = Timeout.start_new(timeout)
    try:
        try:
            for greenlet in greenlets:
                greenlet.rawlink(put)
            if raise_error:
                for _ in xrange(count):
                    greenlet = queue.get()
                    if not greenlet.successful():
                        raise greenlet.exception
            else:
                for _ in xrange(count):
                    queue.get()
        except:
            if sys.exc_info()[1] is not timeout:
                raise
        finally:
            for greenlet in greenlets:
                greenlet.unlink(put)
    finally:
        timeout.cancel()
Esempio n. 3
0
def joinall(greenlets, timeout=None, raise_error=False):
    from gevent.queue import Queue
    queue = Queue()
    put = queue.put
    timeout = Timeout.start_new(timeout)
    try:
        try:
            for greenlet in greenlets:
                greenlet.rawlink(put)
            for _ in xrange(len(greenlets)):
                greenlet = queue.get()
                if raise_error and not greenlet.successful():
                    getcurrent().throw(greenlet.exception)
        except:
            for greenlet in greenlets:
                greenlet.unlink(put)
            if sys.exc_info()[1] is not timeout:
                raise
    finally:
        timeout.cancel()