1-1.并行:真的多任务执行(CPU核数>=任务数);即在某个时刻点上,有多个程序同时运行在多个CPU上

1-2.并发:假的多任务执行(CPU核数<任务数);即一段时间内,有多个程序在同一个CPU上运行

2-1.同步:同步是指代码调用IO操作时,必须等待IO操作完成才返回的调用方式

2-2.异步:同步是指代码调用IO操作时,不必等待IO操作完成才返回的调用方式

3-1.阻塞:阻塞是指调用函数时候当前线程被挂起

3-2:非阻塞:非阻塞是指调用函数时候当前线程不会被挂起,而是立即返回

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @File : 多任务yield-demo2.py
# @Author: Liugp
# @Date : 2019/6/2
# @Desc : def gen_func():
# 1.可以产出值;2.可以接收值,调用方法传进来的值
try:
yield "http://www.baidu.com"
except Exception:
pass
yield 2
yield 3
return "bobby" # 1.生成器不仅可以产出值,还可以接收值 if __name__ == "__main__":
gen = gen_func()
print(next(gen))
gen.throw(Exception,"download error")
print(next(gen))
gen.throw(Exception, "download error")
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @File : gen_close.py
# @Author: Liugp
# @Date : 2019/6/2
# @Desc :
def gen_func():
# 1.可以产出值;2.可以接收值,调用方法传进来的值
yield "http://www.baidu.com"
yield 2
yield 3
return "bobby" # 1.生成器不仅可以产出值,还可以接收值 if __name__ == "__main__":
gen = gen_func()
print(next(gen))
gen.close()
print('bobby')
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @File : gen_to_coroutine.py.py
# @Author: Liugp
# @Date : 2019/6/2
# @Desc :
# 生成器是可以暂停的函数
import inspect
def gen_func():
value = yield 1
return "bobby" if __name__ == "__main__":
gen = gen_func()
print(inspect.getgeneratorstate(gen))
next(gen)
print(inspect.getgeneratorstate(gen))
try:
next(gen)
except StopIteration:
pass
print(inspect.getgeneratorstate(gen))
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @File : yield_from_test.py
# @Author: Liugp
# @Date : 2019/6/2
# @Desc :
from itertools import chain my_list = [1,2,3]
my_dict = {
'bobby1':'http://www.baidu.com',
'bobby2':'http://www.taobao.com'
} def my_chain(*args,**kwargs):
for my_iterable in args:
yield from my_iterable
# for value in my_iterable:
# yield value for value in my_chain(my_list,my_dict,range(5,10)):
print(value) def g1(iterable):
yield from iterable def main():
g = g1()
g.send(None) #1. main调用方g1(委托生成器)gen 子生成器
#2. yield from 会在调用方与子生成器之间建立一个双向通道

异步IO和协程的更多相关文章

  1. Python异步IO之协程(一):从yield from到async的使用

    引言:协程(coroutine)是Python中一直较为难理解的知识,但其在多任务协作中体现的效率又极为的突出.众所周知,Python中执行多任务还可以通过多进程或一个进程中的多线程来执行,但两者之中 ...

  2. 进程&线程(三):外部子进程subprocess、异步IO、协程、分布式进程

    1.外部子进程subprocess python之subprocess模块详解--小白博客 - 夜风2019 - 博客园 python subprocess模块 - lincappu - 博客园 之前 ...

  3. 异步IO(协程,消息循环队列)

    同步是CPU自己主动查看IO操作是否完成,异步是IO操作完成后发出信号通知CPU(CPU是被通知的) 阻塞与非阻塞的区别在于发起IO操作之后,CPU是等待IO操作完成再进行下一步操作,还是不等待去做其 ...

  4. day41 - 异步IO、协程

    目录 (见右侧目录栏导航) - 1. 前言- 2. IO的五种模型- 3. 协程    - 3.1 协程的概念- 4. Gevent 模块    - 4.1 gevent 基本使用    - 4.2 ...

  5. Python异步IO之协程(二):使用asyncio的不同方法实现协程

    引言:在上一章中我们介绍了从yield from的来源到async的使用,并在最后以asyncio.wait()方法实现协程,下面我们通过不同控制结构来实现协程,让我们一起来看看他们的不同作用吧- 在 ...

  6. (并发编程)进程池线程池--提交任务2种方式+(异步回调)、协程--yield关键字 greenlet ,gevent模块

    一:进程池与线程池(同步,异步+回调函数)先造个池子,然后放任务为什么要用“池”:池子使用来限制并发的任务数目,限制我们的计算机在一个自己可承受的范围内去并发地执行任务池子内什么时候装进程:并发的任务 ...

  7. day37 异步回调和协程

    异步回调 """ 异步任务使用场景 爬虫 1.从目标站点下载网页数据 本质就是HTML格式字符串 2.用re从字符串中提取出你需要的数据 ""&quo ...

  8. python---异步IO(asyncio)协程

    简单了解 在py3中内置了asyncio模块.其编程模型就是一个消息循环. 模块查看: from .base_events import * from .coroutines import * #协程 ...

  9. Python IO 多路复用 \协程

    IO 多路复用 作用:  检测多个socket是否已经发生变化(是否已经连接成功/是否已经获取数据) 即(可读/可写) IO请求时 解决并发  :  单线程 def get_data(key): cl ...

随机推荐

  1. 修改 SQL SERVER 2008 編輯前200筆 資料表問題? 转载自:http://www.dotblogs.com.tw/easy1201/archive/2008/12/04/6179.aspx

    小弟前幾天 下載安裝了 SQL SERVER 2008 感覺系統效能還不錯 但是要編輯 資料表卻出現 很苦惱 但經過一番波折 終於了解如何改善 先執行SQL Server Management Stu ...

  2. 理解SqlMapConfig.xml文件

    SqlMapConfig.xml mybatis的全局配置文件SqlMapConfig.xml,配置内容如下: properties(属性) settings(全局配置参数) typeAliases( ...

  3. 入门 uCOS 操作系统的一点建议

    原创: 鱼鹰Osprey  鱼鹰谈单片机 3月2日 预计阅读时间: 4 分钟 对于想入门操作系统的读者,我的建议是先学 uCOS II.原因有以下几点: 1.最为重要的原因是网上相关资源非常丰富,这对 ...

  4. Peter Shirley Ray Tracing in One Weekend(下篇)

    Peter Shirley-Ray Tracing in One Weekend (2016) 原著:Peter Shirley 下篇主要对本书的后5章节进行学习,包括材质球的Metal,和Diele ...

  5. java中commons-beanutils的介绍(转)

    1.   概述 commons-beanutil开源库是apache组织的一个基础的开源库.为apache中很多类提供工具方法.学习它是学习其它开源库实现的基础. Commons-beanutil中包 ...

  6. javascript内置对象一:String

    <script>    //string.split("-"),以字符"-"把string拆分成一个数组.返回一个数组    //array.joi ...

  7. Mac OS 系统开发环境的一些坑

    最近换 Mac OS 系统开发,运行项目时遇到各种报错,记录下: 1.拉取项目后,需要安装依赖 npm install ,提示需要安装 xcode,报错如下. 从官网下载 xcode 时提示要更新最新 ...

  8. Java 显示调用隐式调用

    当你没有使用父类默认的构造方法时,此时在子类的构造方法中就需要显示的调用父类定义的构造方法.比如:父类:class Animal{ private String name; //如果你定义一个新的构造 ...

  9. react-native-page-scrollview 的使用方法(实现酷炫的分页轮播效果,还支持自定义View)

    react-native-page-scrollview 对ScrollView的封装,可以很方便的实现水平,垂直分页轮播效果.而且可以自定义分页宽高,和侧边View的旋转,透明度,大小等. 对于原生 ...

  10. ubuntu16.0.4 设置静态ip地址

    由于Ubuntu重启之后,ip很容易改变,可以用以下方式固定ip地址 1.设置ip地址 vi /etc/network/interface # The loopback network interfa ...