2012-05-30 1 views
3

하자. Event()가 들어 왔고 이벤트를 기다리는 X 개의 숫자가 있습니다. 대기중인 그린렛이 완료되면 게시()를하고 싶습니다.이벤트가있는 제어용 그린렛

게시시기를 어떻게 알 수 있습니까?

설계도 :

event.set() -> X number event.wait() -> finally publish the current state. 

가 어떻게 내가 게시하기 전에() 대기 모든 greenlets이 완료되었는지 확인합니까?

대기중인 모든 새끼를 그룹 에 넣고 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)이 작동합니다. 대기중인 모든 소방서가 종료되었는지 어떻게 확인할 수 있습니까?

답변

3

모든 녹색 알레를 목록에 넣고 gevent.joinall(your_greenlets)으로 전화 할 수 있습니다. documentation은 다소 여유가 있지만 example입니다. 대신 event_setter()에서 gevent.sleep (0)의) group.join를 (사용하는 경우

0

, 당신은 다음과 같이 원하는 결과를 볼 수 있습니다

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"인쇄 줄 : 인쇄 "그룹 크기 : % d"% (len (그룹),)