http://www.dabeaz.com/coroutines/Coroutines.pdfに従ってコルーチンパイプラインを試しています
sink
問題は、印刷するだけでなく、どうすれば価値を得ることができるかということです。
たとえば、このコードを見てください
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())
このコードで私は得る:
>>> pipe.send(10)
100
次に、出力するのではなく戻り値を取得したいので、シンクから譲ろうとします:
@coroutine
def sink():
try:
while True:
yield (yield)
except GeneratorExit:
pass
しかし、それは機能していないようで、ジェネレーターではなくpipe.send(10)
まだ返されます。None
では、戻り値を取得するにはどうすればよいでしょうか。