にコルーチンからの戻り値を取得しますか?このコードではどうか、私は<code>sink</code>だけではなく、それを印刷から値を取得することができ、私は<a href="http://www.dabeaz.com/coroutines/Coroutines.pdf" rel="noreferrer">http://www.dabeaz.com/coroutines/Coroutines.pdf</a></p> <p>質問があるに応じてコルーチンパイプラインをしようとしているのpython
例えば、このコードを取る
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
発電機。
戻り値はどのようにして得られますか?
Iは、値A及び値Bに押した場合、フィルタ、放送、処理等の後、Aは、シンクする10の値を生成し、Bは8つの値を生成セイ沈む。私はAからの最大値とBからの最大値を求めますが、AからまたはBから生成された値はどのようにしてわかりますか?どのようにシンクでそれを行う上の任意のアイデア? – lxyu
@lxyuキーを送信して、どのプロデューサが値を生成したかを知ることができます。シンクは、送信する値と最大値を知る状態を持つことができます。私の編集を参照してください。 – sloth
必要なすべてのデータをカプセル化するオブジェクトを送信することをお勧めします。 – Cucu