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 相关文章推荐
PyQt5每天必学之进度条效果
Apr 19 Python
python读取word文档,插入mysql数据库的示例代码
Nov 07 Python
Python编程深度学习绘图库之matplotlib
Dec 28 Python
django与小程序实现登录验证功能的示例代码
Feb 19 Python
在python image 中安装中文字体的实现方法
Aug 22 Python
Python在OpenCV里实现极坐标变换功能
Sep 02 Python
利用Python实现某OA系统的自动定位功能
May 27 Python
Python如何获取文件指定行的内容
May 27 Python
Django框架安装及项目创建过程解析
Sep 14 Python
python 下载文件的多种方法汇总
Nov 17 Python
上手简单,功能强大的Python爬虫框架——feapder
Apr 27 Python
python实现对doc、txt、xls等文档的读写操作
Apr 02 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
Nginx实现反向代理
2017/09/20 Servers
关于B/S判断浏览器断开的问题讨论
2008/10/29 Javascript
Jquery实现三层遍历删除功能代码
2013/04/23 Javascript
Node.js(安装,启动,测试)
2014/06/09 Javascript
Flash图片上传组件 swfupload使用指南
2015/03/14 Javascript
jquery控制显示服务器生成的图片流
2015/08/04 Javascript
jquery对象和DOM对象的任意相互转换
2016/02/21 Javascript
jQuery深拷贝Json对象简单示例
2016/07/06 Javascript
AngularJS 中使用Swiper制作滚动图不能滑动的解决方法
2016/11/15 Javascript
Bootstrap整体框架之CSS12栅格系统
2016/12/15 Javascript
详解AngularJS 模块化
2017/06/14 Javascript
JS动画定时器知识总结
2018/03/23 Javascript
vue2.0 element-ui中el-select选择器无法显示选中的内容(解决方法)
2018/08/24 Javascript
支付宝小程序tabbar底部导航
2018/11/06 Javascript
Element Dropdown下拉菜单的使用方法
2020/07/26 Javascript
如何在JavaScript中等分数组的实现
2020/12/13 Javascript
[03:52]DOTA2英雄基础教程 酒仙
2013/12/23 DOTA
[01:59]翻天覆地,因你而变,7.20版本地图更新速览
2018/11/24 DOTA
Python读写Excel文件的实例
2013/11/01 Python
python好玩的项目—色情图片识别代码分享
2017/11/07 Python
python中的内置函数max()和min()及mas()函数的高级用法
2018/03/29 Python
解决nohup重定向python输出到文件不成功的问题
2018/05/11 Python
python实现文本进度条 程序进度条 加载进度条 单行刷新功能
2019/07/03 Python
关于Pytorch的MLP模块实现方式
2020/01/07 Python
Macbook安装Python最新版本、GUI开发环境、图像处理、视频处理环境详解
2020/02/17 Python
如何通过命令行进入python
2020/07/06 Python
python如何实现图片压缩
2020/09/11 Python
美国在线印刷公司:PsPrint
2017/10/12 全球购物
一些Solaris面试题
2013/03/22 面试题
轻化专业学生实习自我鉴定
2013/09/20 职场文书
霸王洗发水广告词
2014/03/14 职场文书
对孩子的寄语
2014/04/09 职场文书
薪资证明范本
2015/06/19 职场文书
公司会议开幕词
2016/03/03 职场文书
2019年怎样写好导游词?
2019/07/02 职场文书
浅谈Python实现opencv之图片色素的数值运算和逻辑运算
2021/06/23 Python