假设我有一个 Event() 进来,并且有 X 数量的 greenlets 等待该事件。当那些等待的greenlets完成后,我想做一个 Publish()
我怎么知道什么时候发布?
示意图:
event.set() -> X number event.wait() -> finally publish the current state.
如何确保在发布之前完成所有等待()的greenlet?
我认为将所有等待的 greenlets 放在一个 Group 中并做一个 group.join() 可以工作。
import gevent
from gevent.pool import Group
from gevent.event import Event
import random
incoming = Event()
group = Group()
def test_wait(x):
gevent.sleep(random.random() * 3)
print 'test %s' % (x)
def publish():
print 'published'
for x in range(int(random.random() * 20)):
group.spawn(test_wait, x)
def event_setter():
incoming.set()
gevent.sleep(0)
publish()
event_setter()
如果 test_wait 中没有睡眠,则 Gevent.sleep(0) 有效。我怎么能确定所有等待的greenlets都结束了?