На практике использование синтаксиса "yield from" в Python 3.3
Синтаксис "yield from", представленный в Python 3.3, предлагает значительное расширение возможностей генераторов и сопрограмм. Он устанавливает двустороннее соединение между вызывающим абонентом и субгенератором, обеспечивая бесперебойную связь в обоих направлениях.
Случаи использования для «выхода из»
Чтение Данные от генераторов:
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