python日记—使用函数生成器实现并发编程

强颜欢笑 提交于 2020-08-16 06:48:41
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
'''

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!