Ich versuche Koroutinen Pipeline nach http://www.dabeaz.com/coroutines/Coroutines.pdfWie Rückgabewert von Koroutine in Python
Die Frage ist, erhalten, wie kann ich Wert aus den sink
bekommen und nicht nur gedruckt werden?
Nehmen Sie diesen Code zum Beispiel
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())
Mit diesem Code bekomme ich:
>>> pipe.send(10)
100
Dann will ich lieber den Rückgabewert bekommen, als es zu drucken, ich versuche, von Waschbecken zu ergeben:
Aber es scheint nicht funktioniert, pipe.send(10)
gibt immer noch None
statt a Generator.
Also wie soll ich den Rückgabewert bekommen?
sagen, wenn ich im Wert A und Wert B drücken, nach dem Filter, Verstreuen, Verarbeitung usw., erzeugen A 10 Werte zu sinken, und B 8 erzeugten Werte sinken. Und ich will den maximalen Wert von A und den maximalen Wert von B, aber wie soll ich sagen, welcher Wert von A oder von B erzeugt wird? Irgendeine Idee, wie man es in der Spüle macht? – lxyu
@lxyu Sie können einen Schlüssel senden, um zu erfahren, welcher Produzent einen Wert erzeugt hat, und die Senke könnte einen Status haben, um zu wissen, welche Werte gesendet wurden und welcher Wert der Maximalwert ist. Siehe meine Bearbeitung. – sloth
Ich schlage vor, ein Objekt zu senden, das alle Daten enthält, die Sie benötigen! – Cucu