假设我有一个Event()进来,并且有X个greenlet在等待事件.当这些等待的greenlet完成后,我想执行Publish()
我怎么知道什么时候发布?
原理图:
event.set() -> X number event.wait() -> finally publish the current state.
如何确保在发布之前完成所有wait()的greenlet?
我认为将所有等待中的小工具归为一组
并做一个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放入列表中,然后调用gevent.joinall(your_greenlets). documentation有点备用,但是有一个example.