Python学习---IO的异步[asyncio模块(no-http)]
Asyncio进行异步IO请求操作:
1. @asyncio.coroutine 装饰任务函数
2. 函数内配合yield from 和装饰器@asyncio.coroutine 配合使用【固定格式】
3. loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.gather(*tasks)) # 接受异步IO的任务并异步执行任务
实例一:
异步IO: 协程机制 + 回调函数
import asyncio @asyncio.coroutine # 装饰任务函数
def func1():
print('before...func1......')
# yield from 和装饰器@asyncio.coroutine 配合使用【固定格式】
yield from asyncio.sleep(5) # 必须写asyncio才表示异步IO执行5秒,time.sleep(5)不生效
print('5秒后...')
print('end...func1......') tasks = [func1(), func1()]
# 事件循环: 对涉及异步,协成,阻塞等IO操作时进行事件的循环操作
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.gather(*tasks)) # 接受异步IO的任务并异步执行任务
loop.close()
AsyncIO缺点:
不支持HTTP请求,也就是说不能直接发送URL过去进行访问
支持TCP请求,也就是说可以发送【IP+端】进行访问
注:HTTP在TCP之上
基于asyncio实现利用TCP模拟HTTP请求
import asyncio
# 基于asyncio实现利用TCP模拟HTTP请求[asyncio实际上不支持HTTP请求]
@asyncio.coroutine
def fetch_async(host, url='/'):
print('HOST和URL信息:', host, url)
# reader: 用于读取连接的信息
# writer: 用于给服务器写信息
reader, writer = yield from asyncio.open_connection(host, 80)
# 基于TCP模拟的HTTP请求:请求头header和请求体body之间是2空行【\r\n\r\n】分隔的
request_header_content = """GET %s HTTP/1.0\r\nHost: %s\r\n\r\n""" % (url, host,)
request_header_content = bytes(request_header_content, encoding='utf-8') # 字符串转换字节 writer.write(request_header_content) # 准备发送数据给服务器
# drain: 英文翻译为喝光,这里作发送完成理解
yield from writer.drain() # 发送数据给服务器,此时可能会阻塞执行个请求,考虑数据量大等原因
text = yield from reader.read() # 等待返回的数据,text就是先收到回复的请求完成后等待其他返回
print(host,url,'返回后的结果:', text)
writer.close() # 关闭流 tasks = [
fetch_async('www.cnblogs.com', '/ftl1012/'),
fetch_async('www.dig.chouti.com', '/images/homepage_download.png')
] loop = asyncio.get_event_loop()
results = loop.run_until_complete(asyncio.gather(*tasks))
loop.close()
基于TCP模拟HTTP详解:
Python学习---IO的异步[asyncio模块(no-http)]的更多相关文章
- Python学习---IO的异步[asyncio +aiohttp模块]
aiohttp aiohttp是在asyncio模块基础上封装的一个支持HTTP请求的模块,内容比8.4.2[基于asyncio实现利用TCP模拟HTTP请求]更全面 安装aiohttp: pip3 ...
- Python学习---IO的异步[tornado模块]
tornado是一个异步非阻塞的WEB框架.它的异步非阻塞实际上就是用事件循环写的. 主要体现在2点: 1. 作为webserver可以接收请求,同时支持异步处理请求.Django只能处理完成上一个请 ...
- Python学习---IO的异步[twisted模块]
安装twisted模块 Linux: pip3 install twisted Window: a. http://www.lfd.uci.edu/~gohlke/pythonlibs/#twiste ...
- Python学习---IO的异步[gevent+Grequests模块]
安装gevent模块 pip3 install gevent Gevent实例 import gevent import requests from gevent import monkey # so ...
- Python学习---IO的异步[自定义异步IO]
自定义IO异步基础知识: --所有的请求都基于socket实现,一个请求就是一个socket socket.setblocking(False) 不需要阻塞,一个请求完了发送另外一个,会报错,需解决 ...
- Python学习系列(六)(模块)
Python学习系列(六)(模块) Python学习系列(五)(文件操作及其字典) 一,模块的基本介绍 1,import引入其他标准模块 标准库:Python标准安装包里的模块. 引入模块的几种方式: ...
- python学习第四十八天json模块与pickle模块差异
在开发过程中,字符串和python数据类型进行转换,下面比较python学习第四十八天json模块与pickle模块差异. json 的优点和缺点 优点 跨语言,体积小 缺点 只能支持 int st ...
- Python学习day17-常用的一些模块
figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...
- 【Python学习之九】asyncio—异步IO
asyncio 这是python3.4引入的标准库,直接内置对异步IO的支持.asyncio的编程模型就是一个消息循环.从asyncio模块中直接获取一个EventLoop的引用,然后把需要执行的协程 ...
随机推荐
- MySQL命令行导入导出数据
参考:http://www.cnblogs.com/xcxc/archive/2013/01/30/2882840.html 这篇文章写得非常好,又简洁,而且深入浅出,排版也非常好看,不会像网上的只是 ...
- 面试题20:搜索二叉树可能有两个元素发生了交换,如何恢复BST?
Two elements of a binary search tree (BST) are swapped by mistake. Recover the tree without changing ...
- 【BI】资料收集
从无到有--什么是BI 什么是BI(Business Intelligence) - @我爱菊花 - 博客园 http://www.cnblogs.com/jiesin/archive/2008/06 ...
- golang基础--常量与运算符
常量与运算符 常量的定义 常量的值在编译时已经确定 常量的定义格式与变量的基本相同 等号的右侧必须是常量或者常量表达式 规范: 常量定义时建议都使用大写,单词之间使用大写 便于包的外部调用 如果只限于 ...
- 提高 ASP.NET Web 应用性能的 24 种方法和技巧(转载)
在这篇文章中,将介绍一些提高 ASP.NET Web 应用性能的方法和技巧.众所周知,解决性能问题是一项繁琐的工作,当出现性能问题,每个人都会归咎于编写代码的开发人员. 以下为译文 那性能问题到底该如 ...
- 在iis搭建nuget server时遇到405 method not allow
<configuration> <system.webServer> <validation validateIntegratedModeConfiguration=&q ...
- git分支branch合并到主分支master
如何使用git将分支branch合并到主干master上 对于一人独立使用git进行系统开发时,branch分支相当于版本(Version),如果每次都将新的分支branch提交到GitHub上,则会 ...
- Angular建立待办事项应用
建立路由 接前一小节,在src/app/app.component.html把login组件去掉 第一步: 在src/index.html指定基准路径 浏览器会根据这个路径下载css,图像,js文件, ...
- [转] ASP.NET MVC 模型绑定的功能和问题
摘要:本文将与你深入探究 ASP.NET MVC 模型绑定子系统的核心部分,展示模型绑定框架的每一层并提供扩展模型绑定逻辑以满足应用程序需求的各种方法. 同时,你还会看到一些经常被忽视的模型绑定技术, ...
- nuget.org 无法加载源 https://api.nuget.org/v3/index.json 的服务索引
今天添加新项目想添加几个工具包,打开NuGet就这样了 发生错误如下: [nuget.org] 无法加载源 https://api.nuget.org/v3/index.json 的服务索引. 响应 ...