Если взять обычные генераторы, то реализовать подобное просто:
def g():
yield 1
# какие-то действия
yield 2
# какие-то действия
yield 3
for result in g():
print(result)
Плюс, можно через send() отправлять в такой генератор значения, например так:
def g():
v = 0
while True:
v = yield v * 2
if v > 100:
break
gen = g()
next(gen)
r = 1
l = []
while True:
try:
r = gen.send(r)
l.append(r)
except StopIteration:
break
# l -> [2, 4, 8, 16, 32, 64, 128]
Есть ли возможность так же делать для корутин из нового модуля asyncio?