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 相关文章推荐
使用BeautifulSoup爬虫程序获取百度搜索结果的标题和url示例
Jan 19 Python
python网络编程学习笔记(五):socket的一些补充
Jun 09 Python
Python新手入门最容易犯的错误总结
Apr 24 Python
Python OpenCV 直方图的计算与显示的方法示例
Feb 08 Python
Django Celery异步任务队列的实现
Jul 24 Python
Django接收自定义http header过程详解
Aug 23 Python
Python 线程池用法简单示例
Oct 02 Python
python tornado修改log输出方式
Nov 18 Python
python3 使用Opencv打开USB摄像头,配置1080P分辨率的操作
Dec 11 Python
使用Tensorboard工具查看Loss损失率
Feb 15 Python
pandas 数据类型转换的实现
Dec 29 Python
使用Django实现商城验证码模块的方法
Jun 01 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中的cookie
2006/11/26 PHP
php中常用字符串处理代码片段整理
2011/11/07 PHP
Yii分页用法实例详解
2014/12/04 PHP
php+xml结合Ajax实现点赞功能完整实例
2015/01/30 PHP
迁移PHP版本到PHP7
2015/02/06 PHP
Zend Framework教程之Zend_Registry对象用法分析
2016/03/22 PHP
PHP判断当前使用的是什么浏览器(推荐)
2019/10/27 PHP
PHP+MySQL实现在线测试答题实例
2020/01/02 PHP
PHP连接MySQL数据库操作代码实例解析
2020/07/11 PHP
Jqyery中同等与js中windows.onload的应用
2011/05/10 Javascript
jquery左右滚动焦点图banner图片鼠标经过显示上下页按钮
2013/10/11 Javascript
DIV始终居中的js代码
2014/02/17 Javascript
Javascript实现简单二级下拉菜单实例
2014/06/15 Javascript
JavaScript验证电子邮箱的函数
2014/08/22 Javascript
jQuery实现瀑布流的取巧做法分享
2015/01/12 Javascript
JavaScript数据类型判定的总结笔记
2015/07/31 Javascript
详解JS中遍历语法的比较
2017/04/07 Javascript
Angular4 组件通讯方法大全(推荐)
2018/07/12 Javascript
基于Vue实现关键词实时搜索高亮显示关键词
2018/07/21 Javascript
javascript二维数组和对象的深拷贝与浅拷贝实例分析
2019/10/26 Javascript
详解JavaScript自定义函数
2020/07/29 Javascript
python基础教程之基本内置数据类型介绍
2014/02/20 Python
python常见排序算法基础教程
2017/04/13 Python
Python2.7读取PDF文件的方法示例
2017/07/13 Python
python实现二分查找算法
2017/09/21 Python
Ubuntu安装Jupyter Notebook教程
2017/10/18 Python
django ajax json的实例代码
2018/05/29 Python
python pymysql链接数据库查询结果转为Dataframe实例
2020/06/05 Python
Python实现数字的格式化输出
2020/08/01 Python
HTML5中语义化 b 和 i 标签
2008/10/17 HTML / CSS
html5 浏览器支持 如何让所有的浏览器都支持HTML5标签样式
2012/12/07 HTML / CSS
基于html5实现的图片墙效果
2014/10/16 HTML / CSS
璀璨的珍珠、密钉和个性化珠宝:Lily & Roo
2021/01/21 全球购物
放射科岗位职责
2015/02/14 职场文书
2015年人力资源工作总结
2015/04/08 职场文书
纯CSS打字动画的实现示例
2022/08/05 HTML / CSS