python gevent asyncResult 向协程发送不同的值
python gevent asyncResult send different value to coroutine
在gevent.event.AsyncResult
中很容易将值发送到不同的协程,就像下面的代码一样。
import gevent
from gevent.event import AsyncResult
a = AsyncResult()
def f1():
gevent.sleep(3)
a.set('Hello')
def f2():
print a.get()
def f3():
print a.get()
gevent.joinall([
gevent.spawn(f1),
gevent.spawn(f2),
gevent.spawn(f3),
])
但我想通过 f1 函数将不同的值发送到不同的 coroutine/function,例如:
1.f1 发送 'hello' 给 f2 这样 f2 就可以通过 a.get()
得到 'hello' 消息
2.f1 发送 'world' 给 f3 这样 f3 就可以通过 a.get()
得到 'world' 消息
有没有人有好的解决方案?非常感谢!
如果没有你真正想要完成的上下文,我不能说这是否有意义,但是你可以尝试...
有两个不同的异步结果:
import gevent from gevent.event
import AsyncResult
a = AsyncResult()
b = AsyncResult()
def f1():
gevent.sleep(3)
a.set('Hello')
b.set('World')
def f2():
print a.get()
def f3():
print b.get()
gevent.joinall([
gevent.spawn(f1),
gevent.spawn(f2),
gevent.spawn(f3), ])
或者在一个数据结构中传回多个结果,每个函数自己查找自己想要的结果:
import gevent
from gevent.event import AsyncResult
a = AsyncResult()
def f1():
gevent.sleep(3)
a.set({'first':'Hello', 'second':'World'})
def f2():
print a.get()['first']
def f3():
print a.get()['second']
gevent.joinall([
gevent.spawn(f1),
gevent.spawn(f2),
gevent.spawn(f3),
])
在gevent.event.AsyncResult
中很容易将值发送到不同的协程,就像下面的代码一样。
import gevent
from gevent.event import AsyncResult
a = AsyncResult()
def f1():
gevent.sleep(3)
a.set('Hello')
def f2():
print a.get()
def f3():
print a.get()
gevent.joinall([
gevent.spawn(f1),
gevent.spawn(f2),
gevent.spawn(f3),
])
但我想通过 f1 函数将不同的值发送到不同的 coroutine/function,例如:
1.f1 发送 'hello' 给 f2 这样 f2 就可以通过 a.get()
得到 'hello' 消息
2.f1 发送 'world' 给 f3 这样 f3 就可以通过 a.get()
得到 'world' 消息
有没有人有好的解决方案?非常感谢!
如果没有你真正想要完成的上下文,我不能说这是否有意义,但是你可以尝试...
有两个不同的异步结果:
import gevent from gevent.event
import AsyncResult
a = AsyncResult()
b = AsyncResult()
def f1():
gevent.sleep(3)
a.set('Hello')
b.set('World')
def f2():
print a.get()
def f3():
print b.get()
gevent.joinall([
gevent.spawn(f1),
gevent.spawn(f2),
gevent.spawn(f3), ])
或者在一个数据结构中传回多个结果,每个函数自己查找自己想要的结果:
import gevent
from gevent.event import AsyncResult
a = AsyncResult()
def f1():
gevent.sleep(3)
a.set({'first':'Hello', 'second':'World'})
def f2():
print a.get()['first']
def f3():
print a.get()['second']
gevent.joinall([
gevent.spawn(f1),
gevent.spawn(f2),
gevent.spawn(f3),
])