gpt4 book ai didi

python - 等到几个绿叶中的一个完成

转载 作者:太空宇宙 更新时间:2023-11-04 10:51:25 26 4
gpt4 key购买 nike

我有两个函数从两个不同的连接接收数据,我应该在从其中一个获得结果后关闭两个连接。

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 阻塞当前的 greenlet,直到来自 lst 的两个 greenlet 都准备好了。

gevent.joinall(lst)  # wait much time
print lst[0].get(block=False) # -> 'foo'
print lst[1].get(block=False) # -> 'bar'

我想等到第一个或第二个 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

我该怎么做?

最佳答案

您可以使用 gevent.event.Event(或 AsyncResult)和 Greenlet 的 link() 方法,如下所示:

...
ready = gevent.event.Event()
ready.clear()

def callback():
ready.set()

lst = [gevent.spawn(first), gevent.spawn(second)]
for g in lst:
g.link(callback)

ready.wait()
...

关于python - 等到几个绿叶中的一个完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13579005/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com