def get_num():
while True:
n = yield # 将收到的值给n
print(n)
func = get_num()
# 调用send前,必须要先调用一次next(因为第一次调用生成器,不能传入非None的值)
func.__next__() # 调用一次next,会向生成器传入一个None
for i in range(10):
func.send(i) # 可以调用send,向生成器传入值
单线程下的多并发效果:
# 三个人P1,P2,P3同时收包裹
def recive_package(name):
print("%s开始收包裹了......"%name)
while True:
n = yield
print("%s收到了包裹编号:%s"%(name,n))
p1 = recive_package("P1")
p2 = recive_package("P2")
p3 = recive_package("p3")
p1.__next__()
p2.__next__()
p3.__next__()
if __name__ == '__main__':
for i in range(5):
print("发送第%s批包裹"%(i+1))
p1.send(i)
p2.send(i)
p3.send(i)
# 程序运行结果:
'''
P1开始收包裹了......
P2开始收包裹了......
p3开始收包裹了......
发送第1批包裹
P1收到了包裹编号:0
P2收到了包裹编号:0
p3收到了包裹编号:0
发送第2批包裹
P1收到了包裹编号:1
P2收到了包裹编号:1
p3收到了包裹编号:1
发送第3批包裹
P1收到了包裹编号:2
P2收到了包裹编号:2
p3收到了包裹编号:2
发送第4批包裹
P1收到了包裹编号:3
P2收到了包裹编号:3
p3收到了包裹编号:3
发送第5批包裹
P1收到了包裹编号:4
P2收到了包裹编号:4
p3收到了包裹编号:4
'''
来源:oschina
链接:https://my.oschina.net/jugier/blog/4284525