在實踐中,利用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