一、协程

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用法的更多相关文章

  1. Python中Paramiko协程方式详解

    什么是协程 协程我们可以看做是一种用户空间的线程. 操作系统对齐存在一无所知,需要用户自己去调度. 比如说进程,线程操作系统都是知道它们存在的.协程的话是用户空间的线程,操作系统是不知道的. 为什么要 ...

  2. python中的协程及实现

    1.协程的概念: 协程是一种用户态的轻量级线程.协程拥有自己的寄存器上下文和栈. 协程调度切换时,将寄存器上下文和栈保存到其他地方,在切换回来的时候,恢复先前保存的寄存器上下文和栈. 因此,协程能保留 ...

  3. python线程、协程、I/O多路复用

    目录: 并发多线程 协程 I/O多路复用(未完成,待续) 一.并发多线程 1.线程简述: 一条流水线的执行过程是一个线程,一条流水线必须属于一个车间,一个车间的运行过程就是一个进程(一个进程内至少一个 ...

  4. Python 进程线程协程 GIL 闭包 与高阶函数(五)

    Python 进程线程协程 GIL 闭包 与高阶函数(五) 1 GIL线程全局锁 ​ 线程全局锁(Global Interpreter Lock),即Python为了保证线程安全而采取的独立线程运行的 ...

  5. Python与Golang协程异同

    背景知识 这里先给出一些常用的知识点简要说明,以便理解后面的文章内容. 进程的定义: 进程,是计算机中已运行程序的实体.程序本身只是指令.数据及其组织形式的描述,进程才是程序的真正运行实例. 线程的定 ...

  6. 第十一章:Python高级编程-协程和异步IO

    第十一章:Python高级编程-协程和异步IO Python3高级核心技术97讲 笔记 目录 第十一章:Python高级编程-协程和异步IO 11.1 并发.并行.同步.异步.阻塞.非阻塞 11.2 ...

  7. Python中异步协程的使用方法介绍

    1. 前言 在执行一些 IO 密集型任务的时候,程序常常会因为等待 IO 而阻塞.比如在网络爬虫中,如果我们使用 requests 库来进行请求的话,如果网站响应速度过慢,程序一直在等待网站响应,最后 ...

  8. [转载]Python 3.5 协程究竟是个啥

    http://blog.rainy.im/2016/03/10/how-the-heck-does-async-await-work-in-python-3-5/ [译] Python 3.5 协程究 ...

  9. [译] Python 3.5 协程究竟是个啥

    转自:http://blog.rainy.im/2016/03/10/how-the-heck-does-async-await-work-in-python-3-5/ [译] Python 3.5 ...

随机推荐

  1. 利用WxJava实现网站集成微信登录功能,核心代码竟然不超过10行

    最近网站PC端集成微信扫码登录,踩了不少坑,在此记录下实现过程和注意事项. 本文目录 一.微信开放平台操作步骤1.创建“网站应用”2.获取AppID和AppSecret二.开发指南三.开发实战1.po ...

  2. python 10 动态参数

    目录 1. 函数的动态参数 1.1 动态位置参数(*arges) 1.2 动态关键字参数 (**kwargs) 1.3 万能传参: 2. 函数的注释 3. 名称空间 4. 函数嵌套 5. 函数变量修改 ...

  3. 从零开始搭建Java开发环境第二篇:如何在windows10里安装MySQL

    1 下载安装包 1.1 压缩包 https://dev.mysql.com/downloads/mysql/ [外链图片转存失败(img-oesO8K09-1566652568838)(data:im ...

  4. 原型工具介绍———墨刀以及Axure RP比较

    原型工具——墨刀以及Axure的比较 1759233 目录 一.了解背景... 1 二.下面分开介绍一下这两款工具... 1 2.1 Axure RP. 1 2.2墨刀... 6 三.比较... 8 ...

  5. java-jsp特殊字符处理

    str = str.replaceAll("'", "''").replaceAll("\"", ""&quo ...

  6. JavaScript img标签自带的onload和onerror函数

    onload 加载完成时调用触发 原生: <img src="" alt="Park" onload=“handleImageLoaded()”/> ...

  7. codeforces 459 C. Pashmak and Buses(思维)

    题目链接:http://codeforces.com/problemset/problem/459/C 题意:有n个人,k辆车,d天要求没有两个人在d天都坐在一起.输出坐的方法. 题解:这题很有意思, ...

  8. 接口压测工具WRK的学习与使用

    之前一直在使用jmeter,第一次接触wrk,记录下使用过程以便自己再次使用. 首先,WRK是linux系统上才可以使用的工具,我也不想剑走偏锋的去研究如何让wrk可以在windows系统上使用. 临 ...

  9. C#开发BIMFACE系列27 服务端API之获取模型数据12:获取构件分类树

    系列目录     [已更新最新开发文章,点击查看详细] BIMFACE官方示例中,加载三维模型后,模型浏览器中左上角默认提供了“目录树”的功能,清晰地展示了模型的完整构成及上下级关系. 本篇介绍如何获 ...

  10. 009 Python基本图形绘制

    目录 一.概论 二.方法论 三.实践能力 一.概论 深入理解Python语言 实例2: Python蟒蛇绘制 模块1: turtle库的使用 turtle程序语法元素分析 二.方法论 Python语言 ...