带有事件的gevent控件greenlets

假设我有一个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.

上一篇:Android自定义事件到javascript EventListener


下一篇:C#-可重用类等待事件触发