首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gevent.wait和gevent.joinall有什么区别?

gevent.wait和gevent.joinall有什么区别?
EN

Stack Overflow用户
提问于 2015-10-07 18:17:19
回答 1查看 1.4K关注 0票数 4

假设tasksGreenlet对象的列表。现在有什么区别

代码语言:javascript
复制
gevent.wait(tasks)

代码语言:javascript
复制
gevent.joinall(tasks)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-07 18:21:31

不多!joinall实际上在内部调用wait,并且是一个相当短的函数(源代码):

代码语言:javascript
复制
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,就会引发异常)。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32999598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档