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在windows命令行下输出彩色文字的方法
Mar 19 Python
Python 类与元类的深度挖掘 II【经验】
May 06 Python
Python异常处理例题整理
Jul 07 Python
如何利用Python模拟GitHub登录详解
Jul 15 Python
python将四元数变换为旋转矩阵的实例
Dec 04 Python
详解用Pytest+Allure生成漂亮的HTML图形化测试报告
Mar 31 Python
pandas数据拼接的实现示例
Apr 16 Python
使用Python-OpenCV消除图像中孤立的小区域操作
Jul 05 Python
ffmpeg+Python实现B站MP4格式音频与视频的合并示例代码
Oct 21 Python
python使用matplotlib的savefig保存时图片保存不完整的问题
Jan 08 Python
Python 实现劳拉游戏的实例代码(四连环、重力四子棋)
Mar 03 Python
关于的python五子棋的算法
May 02 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 strstr查找字符串中是否包含某些字符的查找函数
2010/06/03 PHP
php代码收集表单内容并写入文件的代码
2012/01/29 PHP
如何使用php输出时间格式
2013/08/31 PHP
php 三大特点:封装,继承,多态
2017/02/19 PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
2020/02/16 PHP
Yii框架小部件(Widgets)用法实例详解
2020/05/15 PHP
jquery api参考 visualjquery 中国线路 速度快
2007/11/30 Javascript
js动画(animate)简单引擎代码示例
2012/12/04 Javascript
JavaScript中圆括号()和方括号[]的特殊用法疑问解答
2013/08/06 Javascript
Javascript alert消息换行的方法
2013/08/07 Javascript
使用jquery实现IE下按backspace相当于返回操作
2014/03/18 Javascript
Vue中保存用户登录状态实例代码
2017/06/07 Javascript
Vue路由跳转问题记录详解
2017/06/15 Javascript
vue-loader中引入模板预处理器的实现
2019/09/04 Javascript
使用js原生实现年份轮播选择效果实例
2021/01/12 Javascript
[03:55]显微镜下的DOTA2特别篇——430灰烬之灵神级操作
2014/06/24 DOTA
Python整型运算之布尔型、标准整型、长整型操作示例
2017/07/21 Python
Python编程实现从字典中提取子集的方法分析
2018/02/09 Python
keras load model时出现Missing Layer错误的解决方式
2020/06/11 Python
Python3使用tesserocr识别字母数字验证码的实现
2021/01/29 Python
印度网上购物首选目的地:Flipkart
2016/08/01 全球购物
严选全球尖货,立足香港:Bonpont宝盆
2018/07/24 全球购物
维多利亚的秘密阿联酋官网:Victoria’s Secret阿联酋
2019/12/07 全球购物
C#中有没有静态构造函数,如果有是做什么用的?
2016/06/04 面试题
Linux上比较文件的命令都有哪些
2013/09/28 面试题
大学生求职信范文应怎么写
2014/01/01 职场文书
新书吧创业计划书
2014/01/31 职场文书
幸福家庭标语
2014/06/27 职场文书
健康状况证明模板
2014/10/23 职场文书
小学生家长意见
2015/06/03 职场文书
2016年员工年度考核评语
2015/12/02 职场文书
60句有关成长的名言
2019/09/04 职场文书
使用Navicat Premium工具将oracle数据库迁移到MySQL
2021/05/27 Oracle
一篇文章学会Vue中间件管道
2021/06/20 Vue.js
搞笑Gif:这么白这么长的腿像极了一楼的女朋友
2022/03/21 杂记
TypeScript实用技巧 Nominal Typing名义类型详解
2022/09/23 Javascript