2.1 yield 生成器
Python 中通过 yield 来实现类似协程的功能,下面来看一个简单的 demo:
def task1():
while True:
print("----task1---")
yield
time.sleep(2)
def task2():
while True:
print("----task2---")
yield
time.sleep(0.5)
def main():
w1 = task1()
w2 = task2()
while True:
next(w1)
next(w2)
if __name__ == "__main__":
main()
输出结果:
----task1---
----task2---
----task1---
----task2---
...
2.2 区别和相似点
协程和生成器主要有以下差异:
- 生成器总是生成值,一般用于迭代的序列
- 协程关注的是消耗值,是数据的消费者
- 协程不会迭代操作关联,但是生成器会
- 协程强调协同控制程序流,生成器强调保存状态和产生数据
相似点:
- 都不要
return
来实现重复调用的函数或对象 - 都通过
yield
方式来实现