yield在python中初学时,觉得比较难理解。yield的作用:
①返回一个值、②接收调用者的参数
分析下面的代码:
#!/usr/bin/env python3 # -*- coding:utf-8 -*- def consumer(): r = '' while True: n = yield r print("[Consumer] n = %d" %n) if not n: return print("[Consumer] consuming %s..." %n) r = '200 OK' def produce(c): c.send(None) h = 0 while h < 5: h = h + 1 print("[Producer] producing %d..." %h) s = c.send(h) print("[Producer] consumer return: %s" %s) c.close() c = consumer() #创建一个生成器 produce(c) #在该函数中,调用生成器的send()方法
结合程序运行过程,可分析出:
第一步:
在produce(c)函数中,调用了c.send(None)启动了生成器,遇到yield暂停;接着执行produce()中接下来的代码,从运行结果看,确实打印出了[Produce] producing 1 … 当程序运行至c.send(h)时,调用生成器并且通过yield传递了参数(h = 1)进入consumer()函数执行。
第二步:
yield传递参数(h=1)给consumer()函数中的n,并接着上一次暂停处往下继续执行,打印出[Consumer] n = 1,[Consumer] consuming 1… ;在consumer()函数中此时 r 被赋值为'200 OK',接着循环遇到yield, consumer()函数又暂停并且返回变量 r 的值,此时程序又进入produce(c)函数中接着执行。
第三步:
produce(c)函数接着第一步中c.send(h)处,继续往下执行打印出[Producer] consumer return: 200 OK,并进行循环,打印[Producer] producing 2… 后,又调用c.send(h) 。。。如此循环回到第一步!
补充知识:python asyncio模型 事件循环
异步建立在事件循环上.
简单来说事件循环:
1.把要执行的函数放入队列
2.取出函数,执行
3.看看还要不要继续放入此函数
4.继续第一步
一个简单的例子说明:
""" 1.yield 挂起当前函数. 2.使用调度器循环 3.使用next唤醒此函数继续执行 """ def f1(): for i in range(3): print('f1 %d'%i) yield def f2(): for i in range(5): print('f2 %d' %i) yield def f3(): for i in range(10): print('f3 %d'%i) yield #模拟一个调度器 task_q = collections.deque((f1(),f2(),f3())) #让调度器调度这些生成器们 while task_q: task = task_q.popleft() #弹出首个生成器 try: next(task) #执行,如果没有异常证明此生成器还没执行完成,可以继续放入队列中 task_q.append(task) #执行完成后,把任务继续添加到队列中. time.sleep(0.5) except StopIteration as ex: pass
以上这篇Python 中由 yield 实现异步操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
Python,yield,异步
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
- 好薇2024《兵哥哥》1:124K黄金母盘[WAV+CUE]
- 胡歌.2006-珍惜(EP)【步升大风】【FLAC分轨】
- 洪荣宏.2014-拼乎自己看【华特】【WAV+CUE】
- 伊能静.1999-从脆弱到勇敢1987-1996精选2CD【华纳】【WAV+CUE】
- 刘亮鹭《汽车DJ玩主》[WAV+CUE][1.1G]
- 张杰《最接近天堂的地方》天娱传媒[WAV+CUE][1.1G]
- 群星《2022年度发烧天碟》无损黑胶碟 2CD[WAV+CUE][1.4G]
- 罗文1983-罗文甄妮-射雕英雄传(纯银AMCD)[WAV+CUE]
- 群星《亚洲故事香港纯弦》雨果UPMAGCD2024[低速原抓WAV+CUE]
- 群星《经典咏流传》限量1:1母盘直刻[低速原抓WAV+CUE]
- 庾澄庆1993《老实情歌》福茂唱片[WAV+CUE][1G]
- 许巍《在别处》美卡首版[WAV+CUE][1G]
- 林子祥《单手拍掌》华纳香港版[WAV+CUE][1G]
- 郑秀文.1997-我们的主题曲【华纳】【WAV+CUE】
- 群星.2001-生命因爱动听电影原创音乐AVCD【MEDIA】【WAV+CUE】