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),
])