首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >python gevent.event.Event

python gevent.event.Event
EN

Stack Overflow用户
提问于 2015-09-10 13:59:28
回答 1查看 1.4K关注 0票数 3

在阅读了Gevent教程之后,我有一个关于gevent.event.Event的问题。Event.set()会唤醒被Event.wait()阻塞的所有函数吗?

就像下面的代码一样:

代码语言:javascript
运行
复制
import gevent
from gevent.event import Event
evt = Event()

def setter():
    print('In setter')
    gevent.sleep(3)
    print("After first sleep")
    evt.set()     #first set
    print 'second sleep'
    gevent.sleep(3)
    evt.set()     #second set
    print 'end of setter'

def waiter():
    print("in waiter")
    evt.wait()     #first wait
    print 'after first wait'
    evt.wait()     #second wait
    print 'end of waiter'

gevent.joinall([
    gevent.spawn(setter),
    gevent.spawn(waiter),
])

当我运行这段代码时,我发现函数'setter‘中的第一个集合将唤醒所有在函数“侍者”中的等待。但我需要的是先设定,唤醒第一个等待,然后第二个唤醒,第二个等待。在我看来,evt.wait()只有在evt.set()调用时才会被阻塞,我对gevent.event.Event()的理解是否正确?如何实现我的想法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-10 14:14:42

gevent.event.Event的工作方式与threading.Event对象完全一样。因此,一旦设置好了,它就会唤醒服务员并永远保持设置(除非调用了.clear() )。

你想要达到的目标可以这样做:

代码语言:javascript
运行
复制
def setter():
    print('In setter')
    gevent.sleep(3)
    print("After first sleep")
    evt.set()     #first set
    ### now clear evt
    evt.clear()
    ###
    print 'second sleep'
    gevent.sleep(3)
    evt.set()     #second set
    print 'end of setter'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32503964

复制
相关文章

相似问题

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