python中使用asyncio实现异步IO实例分析


Posted in Python onFebruary 26, 2021

1、说明

Python实现异步IO非常简单,asyncio是Python 3.4版本引入的标准库,直接内置了对异步IO的支持。

asyncio的编程模型就是一个消息循环。我们从asyncio模块中直接获取一个EventLoop的引用,然后把需要执行的协程扔到EventLoop中执行,就实现了异步IO。

2、实例

import asyncio
@asyncio.coroutine
def wget(host):
  print('wget %s...' % host)
  connect = asyncio.open_connection(host, 80)
  reader, writer = yield from connect
  header = 'GET / HTTP/1.0\r\nHost: %s\r\n\r\n' % host
  writer.write(header.encode('utf-8'))
  yield from writer.drain()
  while True:
    line = yield from reader.readline()
    if line == b'\r\n':
      break
    print('%s header > %s' % (host, line.decode('utf-8').rstrip()))
  # Ignore the body, close the socket
  writer.close()
loop = asyncio.get_event_loop()
tasks = [wget(host) for host in ['www.sina.com.cn', 'www.sohu.com', 'www.163.com']]
loop.run_until_complete(asyncio.wait(tasks))
loop.close()

知识点扩展:

数据流(Streams)

数据流(Streams)是用于处理网络连接的高阶异步/等待就绪(async/await-ready)原语,可以在不使用回调和底层传输协议的情况下发送和接收数据。

以下是一个用asyncio实现的TCP回显客户端:

import asyncio

async def tcp_echo_client(message):
  reader, writer = await asyncio.open_connection(
    '127.0.0.1', 8888)

  print(f'Send: {message!r}')
  writer.write(message.encode())

  data = await reader.read(100)
  print(f'Received: {data.decode()!r}')

  print('Close the connection')
  writer.close()
  await writer.wait_closed()

asyncio.run(tcp_echo_client('Hello World!'))

到此这篇关于python中使用asyncio实现异步IO实例分析的文章就介绍到这了,更多相关python中使用asyncio实现异步IO内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
c++生成dll使用python调用dll的方法
Jan 20 Python
Python中subprocess模块用法实例详解
May 20 Python
开源Web应用框架Django图文教程
Mar 09 Python
python中使用xlrd读excel使用xlwt写excel的实例代码
Jan 31 Python
Pandas GroupBy对象 索引与迭代方法
Nov 16 Python
Python获取航线信息并且制作成图的讲解
Jan 03 Python
Python中的heapq模块源码详析
Jan 08 Python
Python Web静态服务器非堵塞模式实现方法示例
Nov 21 Python
keras tensorflow 实现在python下多进程运行
Feb 06 Python
python GUI计算器的实现
Oct 09 Python
用python监控服务器的cpu,磁盘空间,内存,超过邮件报警
Jan 29 Python
python 爬取华为应用市场评论
May 29 Python
浅析Python模块之间的相互引用问题
Feb 26 #Python
python实现学生通讯录管理系统
Feb 25 #Python
基于Pytorch版yolov5的滑块验证码破解思路详解
Feb 25 #Python
python实现不同数据库间数据同步功能
Feb 25 #Python
使用python实现学生信息管理系统
Feb 25 #Python
pytho matplotlib工具栏源码探析一之禁用工具栏、默认工具栏和工具栏管理器三种模式的差异
Feb 25 #Python
使用tkinter实现三子棋游戏
Feb 25 #Python
You might like
Windows下的PHP安装文件线程安全和非线程安全的区别
2014/04/23 PHP
替换php字符串中的单引号为双引号的方法
2017/02/16 PHP
jQuery下实现等待指定元素加载完毕(可改成纯js版)
2013/07/11 Javascript
js动画效果制件让图片组成动画代码分享
2014/01/14 Javascript
Javascript前端UI框架Kit使用指南之kitjs的对话框组件
2014/11/28 Javascript
JQuery实现的按钮倒计时效果
2015/12/23 Javascript
jquery遍历函数siblings()用法实例
2015/12/24 Javascript
JS正则表达式验证账号、手机号、电话和邮箱是否合法
2017/03/08 Javascript
node.js中路由,中间件,ge请求和post请求的参数详解
2017/12/26 Javascript
解决webpack+Vue引入iView找不到字体文件的问题
2018/09/28 Javascript
JS复杂判断的更优雅写法代码详解
2018/11/07 Javascript
微信小程序实现卡片层叠滑动效果
2019/06/21 Javascript
通过循环优化 JavaScript 程序
2019/06/24 Javascript
Node爬取大批量文件的方法示例
2019/06/28 Javascript
js中比较两个对象是否相同的方法示例
2019/09/02 Javascript
解决使用layui对select append元素无效或者未及时更新的问题
2019/09/18 Javascript
koa中间件核心(koa-compose)源码解读分析
2020/06/15 Javascript
如何通过50行Python代码获取公众号全部文章
2019/07/12 Python
Python对接支付宝支付自实现功能
2019/10/10 Python
python实现操作文件(文件夹)
2019/10/31 Python
Python求正态分布曲线下面积实例
2019/11/20 Python
Python爬虫代理池搭建的方法步骤
2020/09/28 Python
用python计算文件的MD5值
2020/12/23 Python
html5+css3之动画在webapp中的应用
2014/11/21 HTML / CSS
购买原创艺术品:Zatista
2019/11/09 全球购物
初三家长会邀请函
2014/01/18 职场文书
汉语言文学毕业生自荐信范文
2014/03/24 职场文书
医院竞聘演讲稿
2014/05/16 职场文书
税务干部群众路线教育实践活动自我剖析材料
2014/09/21 职场文书
教师党的群众路线教育实践活动学习笔记
2014/11/05 职场文书
大学生自荐材料范文
2014/12/30 职场文书
交通事故和解协议书
2015/01/27 职场文书
青年教师听课心得体会
2016/01/15 职场文书
智慧人生:永远不需要向任何人解释你自己
2019/08/20 职场文书
在Windows Server 2012上安装 .NET Framework 3.5 所遇到的问题
2022/04/29 Servers
mysql实现将字符串字段转为数字排序或比大小
2022/06/14 MySQL