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计算三角函数之acos()方法的使用
May 15 Python
简单介绍Python的Django框架的dj-scaffold项目
May 30 Python
Python3实现并发检验代理池地址的方法
Sep 18 Python
Python tkinter实现的图片移动碰撞动画效果【附源码下载】
Jan 04 Python
Python实现输出某区间范围内全部素数的方法
May 02 Python
python函数的万能参数传参详解
Jul 26 Python
Python使用python-docx读写word文档
Aug 26 Python
Python + Flask 实现简单的验证码系统
Oct 01 Python
python 使用pygame工具包实现贪吃蛇游戏(多彩版)
Oct 30 Python
python中图像通道分离与合并实例
Jan 17 Python
Python while循环使用else语句代码实例
Feb 07 Python
python基础之while循环语句的使用
Apr 20 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
《星际争霸》各版本雷兽特点图文解析 雷兽不同形态一览
2020/03/02 星际争霸
一个ORACLE分页程序,挺实用的.
2006/10/09 PHP
php mssql 日期出现中文字符的解决方法
2009/03/10 PHP
php URL编码解码函数代码
2009/03/10 PHP
php统计文件大小,以GB、MB、KB、B输出
2011/05/29 PHP
php实现的二叉树遍历算法示例
2017/06/15 PHP
HTML颜色选择器实现代码
2010/11/23 Javascript
jQuery获取文本节点之 text()/val()/html() 方法区别
2011/03/01 Javascript
jQuery遮罩层实现方法实例详解(附遮罩层插件)
2015/12/08 Javascript
jQuery表格插件datatables用法详解
2020/11/23 Javascript
Vue.js 2.0学习教程之从基础到组件详解
2017/04/24 Javascript
javascript Function函数理解与实战
2017/12/01 Javascript
Vue中函数防抖节流的理解及应用实现
2020/04/24 Javascript
Python BeautifulSoup中文乱码问题的2种解决方法
2014/04/22 Python
python爬取NUS-WIDE数据库图片
2016/10/05 Python
Python基础教程之利用期物处理并发
2018/03/29 Python
Python3.6+Django2.0以上 xadmin站点的配置和使用教程图解
2019/06/04 Python
画pytorch模型图,以及参数计算的方法
2019/08/17 Python
Python使用APScheduler实现定时任务过程解析
2019/09/11 Python
python中用ctypes模拟点击的实例讲解
2020/11/26 Python
python Timer 类使用介绍
2020/12/28 Python
python中random模块详解
2021/03/01 Python
【HTML5】3D模型--百行代码实现旋转立体魔方实例
2016/12/16 HTML / CSS
美国在线轮胎零售商:SimpleTire
2019/04/08 全球购物
艺术专业大学生自我评价
2013/09/22 职场文书
编辑找工作求职信分享
2014/01/03 职场文书
经销商会议欢迎词
2014/01/11 职场文书
《一个小村庄的故事》教学反思
2014/04/13 职场文书
园林技术专业求职信
2014/07/28 职场文书
验房委托书
2014/08/30 职场文书
2014幼儿园家长工作总结
2014/11/10 职场文书
小学科学教学计划
2015/01/21 职场文书
社区党支部承诺书
2015/04/29 职场文书
指导老师鉴定意见
2015/06/05 职场文书
小学二年级班主任工作经验交流材料
2015/11/02 职场文书
win10电脑右下角输入法图标不见了?Win10右下角不显示输入法的解决方法
2022/07/23 数码科技