Python连载40-协程定义及状态、send语句、yield用法
一、协程
1.历史进程:
(1)3.4引入协程,用yield来实现
(2)3.5引入协程语法
(3)实现协程比较好的包有asyncio,tornado,gevent
2.定义:协程是为非抢占式多任务产生子程序的计算机程序组件,协程允许不同入口点在不同位置暂停或开始执行程序
3.从技术角度讲,协程就是一个可以暂停执行的函数,或者干脆把协程理解为一个生成器
4.协程对资源的消耗很小,要比多进程消耗的资源小多了,因此多并发下,协程更节省资源。
5.协程的实现
(1)yield返回;(2)send调用
(3)协程的三个状态:
inspect.geigeneratorstate(...)函数确定,该函数会返回下面的字符串中的一个: GEN_CREATED:等待开始执行 GEN_RUNNING:解释器正在执行 GEN_SUSPENED:在yield表达式处暂停 GEN_CLOSED:执行结束 next预激(prime)
6.举例子(注意里面的注释)
def simple_coroutine():
print("->start")
x = yield#这个函数执行到这里停止了,等待着给它赋值,也就是后面的send语句
print("->recived",x)
#主线程
sc = simple_coroutine()
print(1111)
#可以使用sc.send(None),效果一样
next(sc)#预激
print(2222)
sc.send("zhexiao")
执行顺序过程如下:

执行结果:

7,既返回值又用send语句的代码
注意:
可以看出这个yield相当于return
语句通过后面的send,之后等价于input语句
def simple_coroutine2(a):
print("->start")
b = yield a#可以看出这个yield相当于return 语句通过后面的send,之后等价于input语句
print("->recived",a,b)
c = yield a+b
print("->recived",a,b,c)
sc2 = simple_coroutine2(5)
aa = next(sc2)
print(aa)
bb = sc2.send(6) #5,6
print(bb)
cc = sc2.send(7) #5,6,7
print(cc)

8.协程异常
协程中未处理的异常会向上冒泡,传给next函数或者send方法的调用方(即触发协程的对象)
停止协程的一种方法:发送某个哨符值,让协程退出,内置的None和Ellipsis等常量经常用作哨符值
二、源码
d27_3_usage_of_coroutine.py
https://github.com/ruigege66/Python_learning/blob/master/d27_3_usage_of_coroutine.py
2.CSDN:https://blog.csdn.net/weixin_44630050(心悦君兮君不知-睿)
3.博客园:https://www.cnblogs.com/ruigege0000/
4.欢迎关注微信公众号:傅里叶变换,个人公众号,仅用于学习交流,后台回复”礼包“,获取大数据学习资料

Python连载40-协程定义及状态、send语句、yield用法的更多相关文章
- Python中Paramiko协程方式详解
什么是协程 协程我们可以看做是一种用户空间的线程. 操作系统对齐存在一无所知,需要用户自己去调度. 比如说进程,线程操作系统都是知道它们存在的.协程的话是用户空间的线程,操作系统是不知道的. 为什么要 ...
- python中的协程及实现
1.协程的概念: 协程是一种用户态的轻量级线程.协程拥有自己的寄存器上下文和栈. 协程调度切换时,将寄存器上下文和栈保存到其他地方,在切换回来的时候,恢复先前保存的寄存器上下文和栈. 因此,协程能保留 ...
- python线程、协程、I/O多路复用
目录: 并发多线程 协程 I/O多路复用(未完成,待续) 一.并发多线程 1.线程简述: 一条流水线的执行过程是一个线程,一条流水线必须属于一个车间,一个车间的运行过程就是一个进程(一个进程内至少一个 ...
- Python 进程线程协程 GIL 闭包 与高阶函数(五)
Python 进程线程协程 GIL 闭包 与高阶函数(五) 1 GIL线程全局锁 线程全局锁(Global Interpreter Lock),即Python为了保证线程安全而采取的独立线程运行的 ...
- Python与Golang协程异同
背景知识 这里先给出一些常用的知识点简要说明,以便理解后面的文章内容. 进程的定义: 进程,是计算机中已运行程序的实体.程序本身只是指令.数据及其组织形式的描述,进程才是程序的真正运行实例. 线程的定 ...
- 第十一章:Python高级编程-协程和异步IO
第十一章:Python高级编程-协程和异步IO Python3高级核心技术97讲 笔记 目录 第十一章:Python高级编程-协程和异步IO 11.1 并发.并行.同步.异步.阻塞.非阻塞 11.2 ...
- Python中异步协程的使用方法介绍
1. 前言 在执行一些 IO 密集型任务的时候,程序常常会因为等待 IO 而阻塞.比如在网络爬虫中,如果我们使用 requests 库来进行请求的话,如果网站响应速度过慢,程序一直在等待网站响应,最后 ...
- [转载]Python 3.5 协程究竟是个啥
http://blog.rainy.im/2016/03/10/how-the-heck-does-async-await-work-in-python-3-5/ [译] Python 3.5 协程究 ...
- [译] Python 3.5 协程究竟是个啥
转自:http://blog.rainy.im/2016/03/10/how-the-heck-does-async-await-work-in-python-3-5/ [译] Python 3.5 ...
随机推荐
- 利用WxJava实现网站集成微信登录功能,核心代码竟然不超过10行
最近网站PC端集成微信扫码登录,踩了不少坑,在此记录下实现过程和注意事项. 本文目录 一.微信开放平台操作步骤1.创建“网站应用”2.获取AppID和AppSecret二.开发指南三.开发实战1.po ...
- python 10 动态参数
目录 1. 函数的动态参数 1.1 动态位置参数(*arges) 1.2 动态关键字参数 (**kwargs) 1.3 万能传参: 2. 函数的注释 3. 名称空间 4. 函数嵌套 5. 函数变量修改 ...
- 从零开始搭建Java开发环境第二篇:如何在windows10里安装MySQL
1 下载安装包 1.1 压缩包 https://dev.mysql.com/downloads/mysql/ [外链图片转存失败(img-oesO8K09-1566652568838)(data:im ...
- 原型工具介绍———墨刀以及Axure RP比较
原型工具——墨刀以及Axure的比较 1759233 目录 一.了解背景... 1 二.下面分开介绍一下这两款工具... 1 2.1 Axure RP. 1 2.2墨刀... 6 三.比较... 8 ...
- java-jsp特殊字符处理
str = str.replaceAll("'", "''").replaceAll("\"", ""&quo ...
- JavaScript img标签自带的onload和onerror函数
onload 加载完成时调用触发 原生: <img src="" alt="Park" onload=“handleImageLoaded()”/> ...
- codeforces 459 C. Pashmak and Buses(思维)
题目链接:http://codeforces.com/problemset/problem/459/C 题意:有n个人,k辆车,d天要求没有两个人在d天都坐在一起.输出坐的方法. 题解:这题很有意思, ...
- 接口压测工具WRK的学习与使用
之前一直在使用jmeter,第一次接触wrk,记录下使用过程以便自己再次使用. 首先,WRK是linux系统上才可以使用的工具,我也不想剑走偏锋的去研究如何让wrk可以在windows系统上使用. 临 ...
- C#开发BIMFACE系列27 服务端API之获取模型数据12:获取构件分类树
系列目录 [已更新最新开发文章,点击查看详细] BIMFACE官方示例中,加载三维模型后,模型浏览器中左上角默认提供了“目录树”的功能,清晰地展示了模型的完整构成及上下级关系. 本篇介绍如何获 ...
- 009 Python基本图形绘制
目录 一.概论 二.方法论 三.实践能力 一.概论 深入理解Python语言 实例2: Python蟒蛇绘制 模块1: turtle库的使用 turtle程序语法元素分析 二.方法论 Python语言 ...