send 方法 练习 使用yield实现线程并发(协程) , 生成器方式遍历文件

# ********** 读取文件 计算出人口总数 用生成器方式
f = open("city", 'r', encoding='utf-8')   # 用utf-8格式打开文件
def get_p():
    for i in f:        # 循环遍历整个文件
        yield eval(i)  # 将读取到的字符串,转换成字典格式,用yield 转换为生成器

g = get_p()
# print(next(g)['p'])
a = 0              # 用于存放总数
for i in g:
    a = a + i['p']
print(a)

f.close()
#  *************  send 方法 练习  使用yield实现线程并发(协程)
def consumer():
    while True:     # 传过来多次所以要循环
        file = yield  # file 等待 send 传值
        print(file)
def producer():
    c1 = consumer()  # 调用consumer()
    c2 = consumer()
    next(c1)         # c1 为生成器对象  使用next方法调用下一个参数
    next(c2)
    for i in range(5):  # range 循环
        c1.send(i)      # 使用send 方法传值
        c2.send(i)      # 一起进行
producer()

city.txt 文件

{ 'name':'上海','p':10}
{ 'name':'北京','p':10}
{ 'name':'河北','p':10}



猜你喜欢

转载自blog.csdn.net/weixin_42100915/article/details/80218548