【发布时间】:2014-10-02 14:34:09
【问题描述】:
我正在尝试实现一个简单的 gevent 设置。有一个发送者应该并行向几个服务员发送一个值。 Event 类最接近于解决这个问题,如下所示。
每三秒,setter 会创建一个事件,该事件会解除对所有服务员的阻塞。事件随即被清除,因此服务员再次阻塞,直到下一次。
import gevent
from gevent.event import Event
evt = Event()
def setter():
'''After 3 seconds, wake all threads waiting on the value of evt'''
while True:
gevent.sleep(3)
evt.set()
evt.clear()
def waiter(arg):
while True:
evt.wait()
print("waiter {}".format(arg))
def main():
gevent.joinall([
gevent.spawn(setter),
gevent.spawn(waiter,1),
gevent.spawn(waiter,2),
gevent.spawn(waiter,3),
])
if __name__ == '__main__': main()
现在,我只需要执行此操作,还需要向服务员传递一个值。显而易见的选择是使用AsyncResult。但是,无法clear AsyncResult 对象,因此等待者最终陷入无限循环。
你有什么想法如何实现这个吗?
【问题讨论】:
-
为什么不使用共享变量来存储您想要发送的任何内容,并将引用传递给设置器和服务员。 setter 可以在调用
set之前将其更改为任何内容?
标签: python concurrency gevent