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中的Django框架中prefetch_related()函数对数据库查询的优化
Apr 01 Python
举例讲解Python中装饰器的用法
Apr 27 Python
Python实现快速多线程ping的方法
Jul 15 Python
谈谈如何手动释放Python的内存
Dec 17 Python
Python实现字符串格式化的方法小结
Feb 20 Python
python分布式环境下的限流器的示例
Oct 26 Python
python实现五子棋小游戏
Mar 25 Python
Python不同目录间进行模块调用的实现方法
Jan 29 Python
python里运用私有属性和方法总结
Jul 08 Python
Python Numpy 控制台完全输出ndarray的实现
Feb 19 Python
Python sorted排序方法如何实现
Mar 31 Python
Python GUI之tkinter窗口视窗教程大集合(推荐)
Oct 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中array_map与array_column之间的关系分析
2014/08/19 PHP
将PHP的session数据存储到数据库中的代码实例
2016/06/24 PHP
php抛出异常与捕捉特定类型的异常详解
2016/10/26 PHP
PHP未登录自动跳转到登录页面
2016/12/21 PHP
ExtJS 2.0 实用简明教程之布局概述
2009/04/29 Javascript
jquery固定底网站底部菜单效果
2013/08/13 Javascript
使用JavaScript实现网页版Pongo设计思路及源代码分享
2014/06/16 Javascript
Vue.js双向绑定实现原理详解
2016/12/22 Javascript
如何学JavaScript?前辈的经验之谈
2016/12/28 Javascript
不使用 JS 匿名函数理由
2017/11/17 Javascript
nodejs读取本地中文json文件出现乱码解决方法
2018/10/10 NodeJs
vue进入页面时滚动条始终在底部代码实例
2019/03/26 Javascript
layui.tree组件的使用以及搜索节点功能的实现
2019/09/26 Javascript
vue如何搭建多页面多系统应用
2020/06/17 Javascript
Vue Render函数创建DOM节点代码实例
2020/07/08 Javascript
jQuery冲突问题解决方法
2021/01/19 jQuery
python的re模块应用实例
2014/09/26 Python
Python统计日志中每个IP出现次数的方法
2015/07/06 Python
python3.5基于TCP实现文件传输
2020/03/20 Python
linux环境中没有网络怎么下载python
2019/07/07 Python
在Python中使用MySQL--PyMySQL的基本使用方法
2019/11/19 Python
如何利用pycharm进行代码更新比较
2020/11/04 Python
Django REST Framework 分页(Pagination)详解
2020/11/30 Python
英国汽车零件购物网站:GSF Car Parts
2019/05/23 全球购物
Vrbo西班牙:预订您的度假公寓(公寓、乡村房屋…)
2020/04/27 全球购物
一套中级Java程序员笔试题
2015/01/14 面试题
秘书岗位职责
2013/11/18 职场文书
酒店拾金不昧表扬信
2014/01/18 职场文书
小学运动会班级口号
2014/06/09 职场文书
找工作求职信
2014/07/07 职场文书
宾馆仓管员岗位职责
2014/07/27 职场文书
公司收款委托书范本
2014/09/20 职场文书
市贸粮局召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
幼儿园大班毕业评语
2014/12/31 职场文书
Python 把两层列表展开平铺成一层(5种实现方式)
2021/04/07 Python
Python Flask实现进度条
2022/05/11 Python