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中decorator使用实例
Apr 14 Python
Python+Socket实现基于UDP协议的局域网广播功能示例
Aug 31 Python
Python爬豆瓣电影实例
Feb 23 Python
Django中的文件的上传的几种方式
Jul 23 Python
django-crontab 定时执行任务方法的实现
Sep 06 Python
Python3监控windows,linux系统的CPU、硬盘、内存使用率和各个端口的开启情况详细代码实例
Mar 18 Python
Spring Boot中使用IntelliJ IDEA插件EasyCode一键生成代码详细方法
Mar 20 Python
django ORM之values和annotate使用详解
May 19 Python
解决Pycharm 中遇到Unresolved reference 'sklearn'的问题
Jul 13 Python
Python在后台自动解压各种压缩文件的实现方法
Nov 10 Python
python爬虫scrapy框架的梨视频案例解析
Feb 20 Python
Python深度学习之Pytorch初步使用
May 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
PHP SESSION的增加、删除、修改、查看操作
2015/03/20 PHP
YII2.0之Activeform表单组件用法实例
2016/01/09 PHP
php无限极分类实现方法分析
2019/07/04 PHP
经验几则 推荐
2006/09/05 Javascript
javascript完美拖拽的实现方法
2013/09/29 Javascript
js 获取、清空input type="file"的值示例代码
2014/02/19 Javascript
jquery转盘抽奖功能实现
2015/11/13 Javascript
AngularJs动态加载模块和依赖注入详解
2016/01/11 Javascript
分析js闭包引起的事件注册问题
2016/03/29 Javascript
谈一谈JS消息机制和事件机制的理解
2016/04/14 Javascript
json传值以及ajax接收详解
2016/05/24 Javascript
AngularJS 模块详解及简单实例
2016/07/28 Javascript
最好用的Bootstrap fileinput.js文件上传组件
2016/12/12 Javascript
使用Webpack提高Vue.js应用的方式汇总(四种)
2017/07/10 Javascript
jquery中done和then的区别(详解)
2017/12/19 jQuery
vue-cli项目中使用Mockjs详解
2018/05/14 Javascript
jQuery AJAX与jQuery事件的分析讲解
2019/02/18 jQuery
详解小程序退出页面时清除定时器
2019/04/28 Javascript
node.js文件操作系统实例详解
2019/11/05 Javascript
VUE 项目在IE11白屏报错 SCRIPT1002: 语法错误的解决
2020/09/27 Javascript
[06:49]2018DOTA2国际邀请赛寻真——VirtusPro傲视群雄
2018/08/12 DOTA
Python中内置的日志模块logging用法详解
2016/07/12 Python
Python调用C# Com dll组件实战教程
2017/10/12 Python
浅析PHP与Python进行数据交互
2018/05/15 Python
将Django项目部署到CentOs服务器中
2018/10/18 Python
django 实现编写控制登录和访问权限控制的中间件方法
2019/01/15 Python
Python自动化之数据驱动让你的脚本简洁10倍【推荐】
2019/06/04 Python
Python实现的远程文件自动打包并下载功能示例
2019/07/12 Python
Python高级特性之闭包与装饰器实例详解
2019/11/19 Python
pytorch nn.Conv2d()中的padding以及输出大小方式
2020/01/10 Python
《小壁虎借尾巴》教学反思
2014/02/16 职场文书
2014年三八妇女节活动方案
2014/02/28 职场文书
个人批评与自我批评发言稿
2014/09/28 职场文书
健康状况证明书
2014/11/26 职场文书
2019个人工作总结
2019/06/21 职场文书
CSS 鼠标选中文字后改变背景色的实现代码
2023/05/21 HTML / CSS