2つの異なる接続からデータを受信する2つの関数があり、一方から結果を取得した後、両方の接続を閉じる必要があります。
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'
次に、各関数を生成します。
lst = [gevent.spawn(first), gevent.spawn(second)]
gevent.joinall
からの2つのグリーンレットの両方の準備ができるまで、現在のグリーンレットをブロックしlst
ます。
gevent.joinall(lst) # wait much time
print lst[0].get(block=False) # -> 'foo'
print lst[1].get(block=False) # -> 'bar'
最初または2番目のグリーンレットの準備が整うまで待ちたい:
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
どうすればいいですか?