在实践中,利用 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
与微线程的比较
yield from 语法与微线程有一些相似之处,因为它允许挂起和恢复协程,从而创建了一个轻量级的替代方案传统线程。然而,与微线程相比,协程更轻量级并且内存开销更低。它们还在同一线程上运行,避免了与多线程环境中的上下文切换相关的问题。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3