python gevent.event.Event
python gevent.event.Event
阅读 Gevent Tutorial 后,我对 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'中的第一个设置会唤醒函数'waiter'中的所有等待。但我需要的是首先设置唤醒第一个等待,然后第二个设置唤醒第二个等待。我认为 evt.wait() 只有在 evt.set() 调用时才会被阻塞,我对 gevent.event.Event() 的理解正确吗?如何实现我的想法?
gevent.event.Event
与 threading.Event
Python 对象完全一样。
因此,一旦设置,它就会唤醒服务员并永远保持设置状态(除非调用 .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'
阅读 Gevent Tutorial 后,我对 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'中的第一个设置会唤醒函数'waiter'中的所有等待。但我需要的是首先设置唤醒第一个等待,然后第二个设置唤醒第二个等待。我认为 evt.wait() 只有在 evt.set() 调用时才会被阻塞,我对 gevent.event.Event() 的理解正确吗?如何实现我的想法?
gevent.event.Event
与 threading.Event
Python 对象完全一样。
因此,一旦设置,它就会唤醒服务员并永远保持设置状态(除非调用 .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'