异步IO和协程
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和协程的更多相关文章
- Python异步IO之协程(一):从yield from到async的使用
引言:协程(coroutine)是Python中一直较为难理解的知识,但其在多任务协作中体现的效率又极为的突出.众所周知,Python中执行多任务还可以通过多进程或一个进程中的多线程来执行,但两者之中 ...
- 进程&线程(三):外部子进程subprocess、异步IO、协程、分布式进程
1.外部子进程subprocess python之subprocess模块详解--小白博客 - 夜风2019 - 博客园 python subprocess模块 - lincappu - 博客园 之前 ...
- 异步IO(协程,消息循环队列)
同步是CPU自己主动查看IO操作是否完成,异步是IO操作完成后发出信号通知CPU(CPU是被通知的) 阻塞与非阻塞的区别在于发起IO操作之后,CPU是等待IO操作完成再进行下一步操作,还是不等待去做其 ...
- day41 - 异步IO、协程
目录 (见右侧目录栏导航) - 1. 前言- 2. IO的五种模型- 3. 协程 - 3.1 协程的概念- 4. Gevent 模块 - 4.1 gevent 基本使用 - 4.2 ...
- Python异步IO之协程(二):使用asyncio的不同方法实现协程
引言:在上一章中我们介绍了从yield from的来源到async的使用,并在最后以asyncio.wait()方法实现协程,下面我们通过不同控制结构来实现协程,让我们一起来看看他们的不同作用吧- 在 ...
- (并发编程)进程池线程池--提交任务2种方式+(异步回调)、协程--yield关键字 greenlet ,gevent模块
一:进程池与线程池(同步,异步+回调函数)先造个池子,然后放任务为什么要用“池”:池子使用来限制并发的任务数目,限制我们的计算机在一个自己可承受的范围内去并发地执行任务池子内什么时候装进程:并发的任务 ...
- day37 异步回调和协程
异步回调 """ 异步任务使用场景 爬虫 1.从目标站点下载网页数据 本质就是HTML格式字符串 2.用re从字符串中提取出你需要的数据 ""&quo ...
- python---异步IO(asyncio)协程
简单了解 在py3中内置了asyncio模块.其编程模型就是一个消息循环. 模块查看: from .base_events import * from .coroutines import * #协程 ...
- Python IO 多路复用 \协程
IO 多路复用 作用: 检测多个socket是否已经发生变化(是否已经连接成功/是否已经获取数据) 即(可读/可写) IO请求时 解决并发 : 单线程 def get_data(key): cl ...
随机推荐
- 013.子查询和分页子查询(sql实例)
--1 子查询 如果子查询和表连接都实现的时候,推荐用表连接实现( 一般:能用表连接实现的就用表连接,有些情况用表连接不能 或者不易实现的再选择子查询) 系统:缓存,执行计划技术手段 --1 wher ...
- 02 js原型链
1 js原型链是一个绕不开的话题.直接上说吧. /** * 1. js里的原型链是怎么样的? 带class 和不带class的原型链的不同. */ const util = require('util ...
- Spring 注解无效 空指针异常
对于Java开发,现在Spring已成为一种生态,使用Spring成为一种享受,Spring的使用让开发变得更加便捷. 而Spring好用归好用,若不清楚里面的工作原理,使用的时候难免会踩到一些坑. ...
- C语言Ⅰ作业-05
这个作业属于哪个课程 C语言程序设计Ⅰ 这个作业要求在哪里 https://www.cnblogs.com/tongyingjun/p/11722665.html 我在这个课程的目标是 熟练掌握如何用 ...
- 洛谷P1282 多米诺骨牌【线性dp】
题目:https://www.luogu.org/problemnew/show/P1282 题意: 给定n个牌,每个牌有一个上点数和下点数.可以通过旋转改变交换上下点数. 问使得上点数之和和下点数之 ...
- HDU 6068 - Classic Quotation | 2017 Multi-University Training Contest 4
/* HDU 6068 - Classic Quotation [ KMP,DP ] | 2017 Multi-University Training Contest 4 题意: 给出两个字符串 S[ ...
- 立即执行函数与For. . .in语句
㈠立即执行函数 ⑴定义:在函数定义完,立即被调用,这样的函数叫做立即执行函数 ⑵语法:函数对象() ⑶注意:立即执行函数往往只会执行一次 ⑷示例1: (function(){ alert(" ...
- PHP mysqli_more_results() 函数
定义和用法 mysqli_more_results() 函数检查一个多查询是否有更多的结果. 语法 mysqli_more_results(connection); 参数 描述 connection ...
- LinkedBlockingQueue 实现 生产者 消费者
转载:https://blog.csdn.net/sinat_36553913/article/details/79533606 Java中使用LinkedBlockingQueue实现生产者,消费者 ...
- redis基本介绍
1.Redis 简介 Redis 是完全开源免费的,遵守BSD协议,是一个高性能(NOSQL)的key-value数据库,Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化 ...