3

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にスリープがない場合に機能します。待機中のすべてのグリーンレットが終了したことをどのように確認できますか?

4

2 に答える 2

3

すべてのグリーンレットをリストに入れて、を呼び出すことができますgevent.joinall(your_greenlets)ドキュメントは少し予備ですが、があります。

于 2012-05-30T08:25:25.267 に答える
0

event_setter()でgevent.sleep(0)の代わりにgroup.join()を使用すると、次のような目的の結果が表示されます。

Group size: 10
test 6
test 9
test 3
test 7
test 1
test 4
test 0
test 5
test 2
test 8
published

次の行で出力される「グループサイズ:10」:print「グループサイズ:%d」%(len(group)、)

于 2012-06-02T01:34:52.277 に答える