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 ...
随机推荐
- c#滑窗缓存
前言 在大数据时代,软件系统需要具备处理海量数据的能力,同时也更加依赖于系统强大的存储能力与数据响应能力.各种大数据的工具如雨后春笋般孕育而生,这对于系统来说是极大的利好.但在后端采用分布式.云存储和 ...
- python 33 多进程(一)
目录 多进程 1. 进程创建的两种方式 multiprocessing 2. 进程pid (process id) 3. 验证进程之间的空间隔离 4. 进程对象join方法 5. 进程对象其他属性 6 ...
- 解决ionic 中 $ionicHistory.goBack()无法返回
这种解决方法目前只适合用了 <ion-side-menus>这一组件的<ion-view> 解决方法: 在<ion-view>下一级中包一个div,如下图: 搞了几 ...
- Codeforces 1006E
#include<bits/stdc++.h> using namespace std; ; int dfn[maxn],rdfn[maxn],children[maxn]; vector ...
- C#开发BIMFACE系列7 服务端API之获取文件信息列表
系列目录 [已更新最新开发文章,点击查看详细] 本文详细介绍如何获取BIMFACE平台中所有上传过的文件信息列表. 请求地址:GET https://file.bimface.com/file ...
- nginx安装错误:c compiler cc is not found
今天安装软件nginx的时候遇到的报错:c compiler cc is not found 查了下网上的资料,解决方案也不复杂. 先说明下环境: 服务器:CentOS 7 nginx:2.3.1 原 ...
- LeetCode 笔记
Valid Sudoku 数独整体能够满足的情况是比较复杂.参考:编程之美 关于数独问题的讨论 这道题的解法可能简单一点,因为对输入进行来限制.只是去判断是否是一个数独数独的形式相比较来说也是较简单的 ...
- 最长上升子序列模板 hdu 1087 Super Jumping! Jumping! Jumping!
Nowadays, a kind of chess game called “Super Jumping! Jumping! Jumping!” is very popular in HDU. May ...
- flex布局 一侧固定宽度 一侧自适应
想实现一个类似知乎个人主页的资料显示布局 类是下面这样 其中显示图片在一个div,Name和class和button在一个div中,使用justify-content: space-between; ...
- Swift从入门到精通第八篇 - 方法 初识
方法(学习笔记) 环境Xcode 11.0 beta4 swift 5.1 方法 结构体.枚举.类都可以定义方法(实例方法.类型方法) 实例方法(Instance Methods) 实例方法只能用实例 ...