假设tasks是Greenlet对象的列表。现在有什么区别
gevent.wait(tasks)和
gevent.joinall(tasks)发布于 2015-10-07 18:21:31
不多!joinall实际上在内部调用wait,并且是一个相当短的函数(源代码):
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会遍历您的绿地,如果其中一个会引发异常(请注意,它使用的是iwait而不是wait,因此一旦出现一个greenlet,就会引发异常)。
https://stackoverflow.com/questions/32999598
复制相似问题