协程:非抢占式,由代码控制切换,非操作系统强制控制切换
生成器:
def f():
print("ok")
s=yield 6 用于保存并返回当前的执行状态。
print(s)
print("ok2")
yield
gen=f() 函数中加上yield再执行函数,就变成了一个生成器对象,对于生成器,必须调用next()函数才能执行生成器里面的内容,单纯 f()不执行里面的内容,因为此时已经不是一个函数了,变成了生成器,必须调用next()函数
print(gent) ---> <generator object f at 0x000000000000....>,这里返回的是一个生成器的对象
res=next(gen) 这里是生成器对象开始执行,遇到yield就停止,返回yield的值,print(yield)-->返回yield后面的6
程序执行代码 next(gen) 运行结果就是 print("ok") next()方法让让生成器往下执行了一步,打印出了ok
gen.send(5) #send()方法 ,也可以跟生成器进行交互 将5赋值给第一个yield,
此时print(s)----->打印的值是5
协程 (coroutine),又叫微线程:l0
def consumer(name):
print("------>ready to eat baozi")
baozi = yield
print("")