gpt4 book ai didi

python gevent.event.Event

转载 作者:行者123 更新时间:2023-11-28 18:35:57 27 4
gpt4 key购买 nike

在我阅读 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'

关于 python gevent.event.Event,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32503964/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com