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

本文介绍了一个使用Python生成器读取文件并计算人口总数的示例,同时展示了如何利用send方法实现简单的协程并发操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

# ********** 读取文件 计算出人口总数 用生成器方式
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}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值