2015-08-28 55 views
0

像下面的代碼一樣,在gevent.event.AsyncResult中很容易發送值到不同的協程。python gevent 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功能不同的值發送到不同的協程/功能,例如:
1.f1發送「你好」到f2因此F2可以通過a.get得到「你好」消息( )
2.f1將'world'發送到f3,以便f3可以通過a.get(')獲得'world'消息
有沒有人有很好的解決方案?非常感謝!

回答

0

沒有上下文什麼你真正想要實現,我不能說這是否讓任何意義,不過你可以試試...

有兩種不同的異步結果:

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

三江源,我用的字典,你說要解決這個問題 – vinllen