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 相关文章推荐
python中将阿拉伯数字转换成中文的实现代码
May 19 Python
Python实现身份证号码解析
Sep 01 Python
PHP网页抓取之抓取百度贴吧邮箱数据代码分享
Apr 13 Python
python实现协同过滤推荐算法完整代码示例
Dec 15 Python
Python3实现爬虫爬取赶集网列表功能【基于request和BeautifulSoup模块】
Dec 05 Python
基于python实现自动化办公学习笔记(CSV、word、Excel、PPT)
Aug 06 Python
python识别文字(基于tesseract)代码实例
Aug 24 Python
Django实现CAS+OAuth2的方法示例
Oct 30 Python
python 实现生成均匀分布的点
Dec 05 Python
python的json包位置及用法总结
Jun 21 Python
Python中常用的os操作汇总
Nov 05 Python
Python+Pillow+Pytesseract实现验证码识别
May 11 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
PHP内核介绍及扩展开发指南―基础知识
2011/09/11 PHP
解析php中的fopen()函数用打开文件模式说明
2013/06/20 PHP
PHP中怎样保持SESSION不过期 原理及方案介绍
2013/08/08 PHP
php和jquery实现地图区域数据统计展示数据示例
2014/02/12 PHP
php进行支付宝开发中return_url和notify_url的区别分析
2014/12/22 PHP
在WordPress的文章编辑器中设置默认内容的方法
2015/12/29 PHP
php实现与python进行socket通信的方法示例
2017/08/30 PHP
PHP排序二叉树基本功能实现方法示例
2018/05/26 PHP
基于jquery的复制网页内容到WORD的实现代码
2011/02/16 Javascript
Javascript实现的类似Google的Div拖动效果代码
2011/08/09 Javascript
javascript查询字符串参数的方法
2015/01/28 Javascript
js实现的动画导航菜单效果代码
2015/09/10 Javascript
JS实现漂亮的淡蓝色滑动门效果代码
2015/09/23 Javascript
javascript实现tab切换的四种方法
2015/11/05 Javascript
nodejs使用express创建一个简单web应用
2017/03/31 NodeJs
Angularjs 与 bower安装和使用详解
2017/05/11 Javascript
vue vuex vue-rouert后台项目——权限路由(适合初学)
2017/12/29 Javascript
简化版的vue-router实现思路详解
2018/10/19 Javascript
详解小程序设置缓存并且不覆盖原有数据
2019/04/15 Javascript
ES11新增的这9个新特性,你都掌握了吗
2020/10/15 Javascript
vue 解决IOS10低版本白屏的问题
2020/11/17 Javascript
Python函数学习笔记
2008/10/07 Python
python妹子图简单爬虫实例
2015/07/07 Python
Zabbix实现微信报警功能
2016/10/09 Python
tensorflow1.0学习之模型的保存与恢复(Saver)
2018/04/23 Python
Python实现基于socket的udp传输与接收功能详解
2019/11/15 Python
Python数据可视化:泊松分布详解
2019/12/07 Python
Python tkinter和exe打包的方法
2020/02/05 Python
简单的HTML5初步入门教程
2015/09/29 HTML / CSS
全球性的众包图形设计市场:DesignCrowd
2021/02/02 全球购物
SQL Server 2000数据库的文件有哪些,分别进行描述
2013/03/30 面试题
教学大赛获奖感言
2014/01/15 职场文书
小学一年级学生评语大全
2014/12/25 职场文书
爱心捐助活动总结
2015/05/09 职场文书
同意报考公务员证明
2015/06/17 职场文书
Android开发EditText禁止输入监听及InputFilter字符过滤
2022/06/10 Java/Android