実際、Python 3.3 の "yield from" 構文を利用する
Python 3.3 で導入された "yield from" 構文は、次のことを提供します。ジェネレーターとコルーチンの機能が大幅に強化されました。呼び出し元とサブジェネレーターの間の双方向接続を確立し、双方向でのシームレスな通信を可能にします。
「yield from」の使用例
読書ジェネレーターからのデータ:
def reader():
for i in range(4):
yield '<< %s' % i
def reader_wrapper(g):
yield from g
wrap = reader_wrapper(reader())
for i in wrap:
print(i)
# Result:
# << 0
# << 1
# << 2
# << 3
コルーチンへのデータの送信:
def writer():
while True:
w = (yield)
print('>> ', w)
def writer_wrapper(coro):
yield from coro
w = writer()
wrap = writer_wrapper(w)
wrap.send(None) # Prime the coroutine
for i in range(4):
wrap.send(i)
# Expected result:
# >> 0
# >> 1
# >> 2
# >> 3
マイクロスレッドとの比較
構文からの結果は、コルーチンの一時停止と再開を可能にし、軽量の代替手段を作成するという点でマイクロスレッドといくつかの類似点を共有します。伝統的な糸。ただし、コルーチンはマイクロスレッドに比べて軽量で、メモリのオーバーヘッドが低くなります。また、これらは同じスレッド上で実行されるため、マルチスレッド環境でのコンテキスト切り替えに関連する問題が回避されます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3