sto cercando coroutine una condotta secondo http://www.dabeaz.com/coroutines/Coroutines.pdfCome ottenere valore restituito da coroutine in python
La domanda è: come posso ottenere valore dalla sink
, piuttosto che solo stamparlo?
Prendete questo codice per esempio
def coroutine(func):
def start(*args, **kwargs):
cr = func(*args, **kwargs)
next(cr)
return cr
return start
@coroutine
def produce(target):
while True:
n = (yield)
target.send(n*10)
@coroutine
def sink():
try:
while True:
n = (yield)
print(n)
except GeneratorExit:
pass
sk = sink()
pipe = produce(sink())
Con questo codice ottengo:
>>> pipe.send(10)
100
Poi voglio ottenere il valore di ritorno, piuttosto che stamparlo, cerco di cedere da lavandino:
@coroutine
def sink():
try:
while True:
yield (yield)
except GeneratorExit:
pass
Ma sembra non funzionare, pipe.send(10)
restituisce ancora None
anziché un Generatore.
Quindi, come posso ottenere il valore restituito?
Dire se spingo di valore A e il valore B, dopo il filtro, la trasmissione, l'elaborazione etc, Un generato 10 valori di affondare, e B generato 8 valori affondare. E voglio il valore massimo da A e il valore massimo da B, ma come dovrei dire quale valore generato da A o da B? Qualche idea su come farlo nel lavandino? – lxyu
@lxyu È possibile inviare una chiave per sapere quale produttore ha prodotto un valore e il sink potrebbe avere uno stato per sapere quali valori vengono inviati e quale valore è il valore massimo. Vedi la mia modifica. – sloth
Suggerisco di inviare un oggetto che incapsula tutti i dati di cui hai bisogno! – Cucu