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 连接数查询

    SELECT * FROM master.dbo.sysprocesses WHERE dbid IN ( SELECT dbid FROM master.dbo.sysdatabases WHERE ...

  2. mongo批量写入es

    import pymongo import math from elasticsearch import Elasticsearch from elasticsearch import helpers ...

  3. C# 委托、lambda表达式和事件 (7) 持续更新

    引用方法 在C++,函数指针只不过是一个指向内存位置的指针,它不是类型安全的. C# 委托 定义了返回类型和参数的类型.委托类包含对方法的引用,还可以包含多个方法引用. 定义委托 public del ...

  4. Kettle安装和简单使用

    Kettle安装和使用 安装 安装之前需要准备的环境为Java环境,需要提前配置好jdk 下载之后,解压即可使用. 使用 1.因为该工具主要是对数据库进行操作,所以需要提前将mysql的jar包放到l ...

  5. Java web中不同浏览器间导出Excel文件名称乱码问题解决方案

    问题描述: 对于不同浏览器存在对中文编码格式问题,从而在导出Excel文件时,中文文件名出现乱码的情况,即在程序中给要导出的文件指定一个中文名字时,在浏览器上出现的下载框中的文件名出现了乱码,解决如下 ...

  6. 获取当前exe的绝对路径

    string GetExePath(void) { ]={}; GetModuleFileNameA(NULL, szFilePath, MAX_PATH); (strrchr(szFilePath, ...

  7. vue-cropperjs 图片裁剪上传功能使用方法记录

    引入: 官网:https://www.npmjs.com/package/vue-cropperjs 控制台输入: npm install --save vue-cropperjs vue 项目中引入 ...

  8. MySQL基础练习02---牛客网

    目录 1. 从titles表中获取title并按照title分组 2.从titles表中获取title并按照title分组,重复的emp_no忽略 3 查找employees表 4 统计平均工资 5 ...

  9. CentOS上部署Kubernetes集群

    1.开始前系统环境准备 # 1.设置基本环境 yum install -y net-tools conntrack-tools wget vim ntpdate libseccomp libtool- ...

  10. PHP mysqli_get_charset() 函数

    mysqli_get_charset() 函数返回字符集对象. <?php $con=mysqli_connect("localhost","my_user&quo ...