Event()が入って来て、イベントを待っているグリーンレットがX個あるとします。それらの待機中のグリーンレットが完了したら、Publish()を実行したいと思います
いつ公開するかはどうすればわかりますか?
回路図:
event.set() -> X number event.wait() -> finally publish the current state.
公開する前に、wait()を実行するすべてのグリーンレットが実行されていることを確認するにはどうすればよいですか?
待機中のすべてのグリーンレットをグループに入れて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()
Gevent.sleep(0)は、test_waitにスリープがない場合に機能します。待機中のすべてのグリーンレットが終了したことをどのように確認できますか?