在阅读了Gevent教程之后,我有一个关于gevent.event.Event的问题。Event.set()会唤醒被Event.wait()阻塞的所有函数吗?
就像下面的代码一样:
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()的理解是否正确?如何实现我的想法?
发布于 2015-09-10 14:14:42
gevent.event.Event
的工作方式与threading.Event
对象完全一样。因此,一旦设置好了,它就会唤醒服务员并永远保持设置(除非调用了.clear()
)。
你想要达到的目标可以这样做:
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'
https://stackoverflow.com/questions/32503964
复制相似问题