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自动化测试之setUp与tearDown实例
Sep 28 Python
总结Python编程中函数的使用要点
Mar 20 Python
Python正则表达式常用函数总结
Jun 24 Python
python使用json序列化datetime类型实例解析
Feb 11 Python
Python回文字符串及回文数字判定功能示例
Mar 20 Python
Python基于pyCUDA实现GPU加速并行计算功能入门教程
Jun 19 Python
Python3内置模块之json编解码方法小结【推荐】
Dec 09 Python
python3+PyQt5 实现Rich文本的行编辑方法
Jun 17 Python
opencv实现简单人脸识别
Feb 19 Python
如何使用Python抓取网页tag操作
Feb 14 Python
Python hashlib和hmac模块使用方法解析
Dec 08 Python
python中lower函数实现方法及用法讲解
Dec 23 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 mysql数据库操作类
2008/06/04 PHP
PHP 验证码的实现代码
2011/07/17 PHP
PHP MySQL应用中使用XOR运算加密算法分享
2011/08/28 PHP
PHP curl 并发最佳实践代码分享
2012/09/05 PHP
基础的WordPress插件制作教程
2015/11/24 PHP
PHP中获取文件创建日期、修改日期、访问时间的方法
2016/11/05 PHP
javascript下给元素添加事件的方法与代码
2007/08/13 Javascript
Mootools 图片展示插件(lightbox,ImageMenu)收集集合
2010/05/21 Javascript
js获取时间并实现字符串和时间戳之间的转换
2015/01/05 Javascript
Jquery 实现table样式的设定
2015/01/28 Javascript
jQuery实现高亮显示的方法
2015/03/10 Javascript
javascript实现根据iphone屏幕方向调用不同样式表的方法
2015/07/13 Javascript
浅析$(function) ready和onload 的区别
2016/09/03 Javascript
微信小程序 实例应用(记账)详解
2016/09/28 Javascript
jquery实现图片上传前本地预览
2017/04/28 jQuery
JavaScript fetch接口案例解析
2018/08/30 Javascript
jQuery.validate.js表单验证插件的使用代码详解
2018/10/22 jQuery
vue2.0实现列表数据增加和删除
2020/06/17 Javascript
简单介绍Python中利用生成器实现的并发编程
2015/05/04 Python
Python实现将Excel转换为json的方法示例
2017/08/05 Python
Python lambda函数基本用法实例分析
2018/03/16 Python
用Python实现大文本文件切割的方法
2019/01/12 Python
Falsk 与 Django 过滤器的使用与区别详解
2019/06/04 Python
用pyqt5 给按钮设置图标和css样式的方法
2019/06/24 Python
django 中QuerySet特性功能详解
2019/07/25 Python
Python+OpenCV实现旋转文本校正方式
2020/01/09 Python
np.dot()函数的用法详解
2020/01/17 Python
python 实现图片批量压缩的示例
2020/12/18 Python
Snapfish英国:在线照片打印和个性化照片礼品
2017/01/13 全球购物
精伦电子Java笔试题
2013/01/16 面试题
小班秋游活动方案
2014/02/22 职场文书
担保书怎么写
2014/04/01 职场文书
乡镇党员干部四风对照检查材料思想汇报
2014/09/27 职场文书
学校捐款活动总结
2015/05/09 职场文书
文书工作总结(范文)
2019/07/11 职场文书
Pygame游戏开发之太空射击实战敌人精灵篇
2022/08/05 Python