Python 异步协程函数原理及实例详解


Posted in Python onNovember 13, 2019

这篇文章主要介绍了Python 异步协程函数原理及实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

一、 asyncio

1.python3.4开始引入标准库之中,内置对异步io的支持

2.asyncio本身是一个消息循环

3.步骤:

(1)创建消息循环

(2)把协程导入

(3)关闭

4.举例:

import threading
# 引入异步io包
import asyncio
# 使用协程
@ asyncio.coroutine
def hello():
	print("Hello World!(%s)" % threading.current_thread())
print("Start......(%s)" % threading.current_thread())
yield from asyncio.sleep(5)
print("Done.....(%s)" % threading.current_thread())
print("Hello again!(%s)" % threading.current_thread())
# 启动消息循环
loop = asyncio.get_event_loop()
# 定义任务
tasks = [hello(), hello()]
# asyncio使用wait等待task执行完毕
loop.run_until_complete(asyncio.wait(
	tasks))
# 关闭消息循环
loop.close()

Python 异步协程函数原理及实例详解

二、asyncio and await

1.为了更好的表示异步io

2.python3.5引入

3.让协程代码更加简洁

4.使用上,可以简单的进行替换

(1)用async来替换@asyncio,coroutine

(2)用await来替换yield from

按照上面这个语法可以来改写前面的例子,运行结果是完全一致的

三、aiohttp

1.asyncio实现单线程的并发io,在客户端用处不大

2.在服务端可以asyncio+coroutine配合,因为http是io操作

3.asyncio实现了tcp,udp,ssl等协议

4.aiohttp是基于asyncio实现的http框架

5.例子:

import asyncio
from aiohttp
import web
​
async def index(request):
	await asyncio.sleep(0.5)
return web.Response(body = b "<h1>Index</h1>")
​
async def hello(request):
	await asyncio.sleep(0.5)
text = "<h1>hello,%s!</h1>" % request.match_info[
	"name"]
return web.Response(body = text.encode(
	"utf-8"))
​
async def init(loop):
	app = web.Application(loop = loop)
app.router.add_route("GET", "/", index)
app.router.add_route("GET",
	"/hellp/{name}", hello)
srv = await loop.create_server(app.make_handler(),
	"127.0.0.1", 8000)
print(
	"Server started at http://127.0.0.1:8000..."
)
return srv
​
loop = asyncio.get_event_loop()
loop.run_until_complete(init(loop))
loop.run_forever()

四、current,futures

1. python3新增的库

2.类似其它语言的线程池的概念

3.利用multiprocessing实现真正的并行计算(当然要求我们的CPU是多核的)

4.核心原理:以子进程的形式,实现多个python解释器

从而令python程序,可以利用多核CPU来提升执行速度。由于子进程于主解释器相分离,所以他们的全局解释器锁也是相互独立的,每个子进程都能完整的使用一个CPU内核

5.concurrent.futures.Executor

(1)ThreadPoolExecutor

(2)ProcessPoolExecutor

(3)执行的时候需要自行选择

(4)submit(fn,args,kwargs)

fn:异步执行的函数

args,kwargs参数

import time
from concurrent.futures
import ThreadPoolExecutor
​
def return_future(msg):
	time.sleep(3)
return msg
​
# 创建一个线程池
pool = ThreadPoolExecutor(max_workers =
	2)# 参数是2, 代表里面有两个线程干活
# 往线程池里面加入两个task
f1 = pool.submit(return_future, "hello")
f2 = pool.submit(return_future, "world")
time.sleep(1)
# 等待执行完毕
print(f1.done())
time.sleep(3)
print(f2.done())
# 结果
print(f1.result())
print(f2.result())

Python 异步协程函数原理及实例详解

源码

d28_1_asynchronization_examples.py

https://github.com/ruigege66/Python_learning/blob/master/d28_1_asynchronization_examples.py

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python获取当前用户的主目录路径方法(推荐)
Jan 12 Python
python删除服务器文件代码示例
Feb 09 Python
django框架自定义用户表操作示例
Aug 07 Python
Python matplotlib通过plt.scatter画空心圆标记出特定的点方法
Dec 13 Python
Python面向对象程序设计之类的定义与继承简单示例
Mar 18 Python
详解python--模拟轮盘抽奖游戏
Apr 12 Python
对python中的os.getpid()和os.fork()函数详解
Aug 08 Python
解决Python命令行下退格,删除,方向键乱码(亲测有效)
Jan 16 Python
Python pip配置国内源的方法
Feb 14 Python
OpenCV中VideoCapture类的使用详解
Feb 14 Python
如何理解python对象
Jun 21 Python
Python类class参数self原理解析
Nov 19 Python
python文字转语音实现过程解析
Nov 12 #Python
python文字转语音的实例代码分析
Nov 12 #Python
Python上下文管理器全实例详解
Nov 12 #Python
python3-flask-3将信息写入日志的实操方法
Nov 12 #Python
Python API自动化框架总结
Nov 12 #Python
python的scipy实现插值的示例代码
Nov 12 #Python
python对验证码降噪的实现示例代码
Nov 12 #Python
You might like
php的header和asp中的redirect比较
2006/10/09 PHP
从手册去理解分析PHP session机制
2011/07/17 PHP
php检索或者复制远程文件的方法
2015/03/13 PHP
WIFI万能钥匙密码查询接口实例
2015/09/28 PHP
CodeIgniter配置之autoload.php自动加载用法分析
2016/01/20 PHP
网站被黑的假象--ARP欺骗之页面中加入一段js
2007/05/16 Javascript
jQuery 工具函数学习资料
2010/04/29 Javascript
如何检测JavaScript的各种类型
2016/07/30 Javascript
深入浅出es6模板字符串
2017/08/26 Javascript
Vue的路由动态重定向和导航守卫实例
2018/03/17 Javascript
浅谈Vue.js路由管理器 Vue Router
2018/08/16 Javascript
vue+php实现的微博留言功能示例
2019/03/16 Javascript
Vue基于localStorage存储信息代码实例
2020/11/16 Javascript
在Django中输出matplotlib生成的图片方法
2018/05/24 Python
pandas 空的dataframe 插入列名的示例
2018/10/30 Python
[原创]Python入门教程4. 元组基本操作
2018/10/31 Python
Python进阶之自定义对象实现切片功能
2019/01/07 Python
在Python中使用Neo4j的方法
2019/03/14 Python
Django密码系统实现过程详解
2019/07/19 Python
用Python画小女孩放风筝的示例
2019/11/23 Python
Pycharm最常用的快捷键及使用技巧
2020/03/05 Python
python3中sorted函数里cmp参数改变详解
2020/03/12 Python
python函数中将变量名转换成字符串实例
2020/05/11 Python
Python爬虫谷歌Chrome F12抓包过程原理解析
2020/06/04 Python
pycharm-professional-2020.1下载与激活的教程
2020/09/21 Python
台湾最大银发乐活百货:乐龄网
2018/05/21 全球购物
澳大利亚工具仓库:Tools Warehouse
2018/10/15 全球购物
化工专业推荐信范文
2013/11/28 职场文书
考试退步检讨书
2014/01/15 职场文书
标准单位租车协议书
2014/09/23 职场文书
党员教师个人对照检查材料范文
2014/09/25 职场文书
特岗教师个人总结
2015/02/10 职场文书
社区党支部承诺书
2015/04/29 职场文书
入党申请书格式
2019/06/20 职场文书
一文了解MYSQL三大范式和表约束
2022/04/03 MySQL
排查Tomcat进程假死的问题
2022/05/06 Servers