假设tasks
是Greenlet
个对象的列表。现在
gevent.wait(tasks)
和
gevent.joinall(tasks)
答案 0 :(得分:7)
不多! joinall
实际上在内部调用wait
,并且是一个很短的函数(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
如您所见,除非您通过raise_error=True
,joinall
基本上是wait
的直通。
如果您确实通过了raise_error=True
,那么joinall
将通过您的greenlets,如果其中一个提出一个,则会引发异常(请注意它使用的是iwait
而不是{{1}因此,只要一个greenlet引发就会引发异常。