두 개의 다른 연결에서 데이터를 수신하는 두 가지 기능이 있습니다. 그 중 하나에서 결과를 얻은 후에 두 연결을 닫아야합니다. lst
에서 두 개의 greenlets 준비까지여러 개의 greenlets 중 하나가 완료 될 때까지 기다려주십시오
lst = [gevent.spawn(first), gevent.spawn(second)]
gevent.joinall
현재 블록 greenlet :
def first():
gevent.sleep(randint(1, 100)) # i don't know how much time it will work
return 'foo'
def second():
gevent.sleep(randint(1, 100)) # i don't know how much time it will work
return 'bar'
는 그때 각 기능 스폰.
gevent.joinall(lst) # wait much time
print lst[0].get(block=False) # -> 'foo'
print lst[1].get(block=False) # -> 'bar'
나는 eiter가 첫 번째 또는 두 번째 준비 될 greenlet 때까지 기다리고 싶지 :
i_want_such_function(lst) # returns after few seconds
print lst[0].get(block=False) # -> 'foo' because this greenlet is ready
print lst[1].get(block=False) # -> raised Timeout because this greenlet is not ready
내가 그것을 어떻게 할 수 있습니까?