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()
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()