Let's say tasks is a list of Greenlet objects. Now what's the difference between
gevent.wait(tasks)
and
gevent.joinall(tasks)
?
Not much! joinall actually calls wait internally, and is a pretty short function (source code):
def joinall(greenlets, timeout=None, raise_error=False, count=None):
if not raise_error:
return wait(greenlets, timeout=timeout, count=count)
done = []
for obj in iwait(greenlets, timeout=timeout, count=count):
if getattr(obj, 'exception', None) is not None:
if hasattr(obj, '_raise_exception'):
obj._raise_exception()
else:
raise obj.exception
done.append(obj)
return done
As you can see, unless you pass raise_error=True, joinall is essentially a passthrough to wait.
If you do pass raise_error=True, then joinall goes through your greenlets, and raises an exception if one of your them raises one (note that it uses iwait instead of wait, so the exception will be raised as soon as one greenlet raises).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With