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的引用,然后把需要执行的协程 ...
随机推荐
-
去IOE的一点反对意见以及其他
某天在机场听见两老板在聊天,说到他们目前销售的报表老跟不上的问题,说要请一个人,专门合并和分析一些发过来的excel表格,我真想冲上去说,老板,你需要的是一个信息处理的系统,你需要咨询么.回来一直耿耿 ...
-
[读书笔记] CSS权威指南2: 结构和层叠
层叠样式表中最基本的一个方面可能就是层叠——冲突的声明要通过这个层叠过程排序,并由此确定最终的文档表示.这个过程的核心是选择器及其相关声明的特殊性,以及继承机制. 特殊性 对于每个规则,用户代理会计算 ...
-
JavaScript编码规范[百度]
JavaScript编码规范 1 前言 2 代码风格 2.1 文件 2.2 结构 2.2.1 缩进 2.2.2 空格 2.2.3 换行 2.2.4 语句 2.3 命名 ...
-
论文学习 - 《Hadoop平台下的海量数据存储技术研究》
摘要 研究背景: 1. 互联网的图片数据急剧膨胀 2. Hadoop平台下的Hdfs分布式文件系统能够很好的处理海量数据 研究内容: 1. Hadoop平台工作原理 2. Hadoop平台下图片存储系 ...
-
ural 1993 This cheeseburger you don't need
顺次存到{} [] () 遇到逗号就处理下,最后处理逗号之后的 #include <iostream> #include <cstring> #include <stri ...
-
(译文)12个简单(但强大)的JavaScript技巧(二)
原文链接: 12 Simple (Yet Powerful) JavaScript Tips 其他链接: (译文)12个简单(但强大)的JavaScript技巧(一) 强大的立即调用函数表达式 (什么 ...
-
高性能MySql进化论【转】
高性能MySql进化论(十二):Mysql中分区表的使用总结 http://binary.duapp.com/category/sql 当数据量非常大时(表的容量到达GB或者是TB),如果仍然采用索引 ...
-
javascript中对字符串的操作总结
原文:javascript中对字符串的操作总结 没听过一句话吗?程序员的世界,不处理字符串就是处理数组.这是群里的一位前辈和我说的,显然这和我之前理解的DOM是javascript的核心的不同的,看了 ...
-
myeclipse中的项目 如何在项目视窗中显示setting,classpath等配置文件
导入了别人的项目,各种jar包都放好后,path也都build好了,项目也能正常启动,但是就是项目名有红叉,这是为什么呢? 网上有人说Java build path中的jar包missing了,这是一 ...
-
LeetCode 824 Goat Latin 解题报告
题目要求 A sentence S is given, composed of words separated by spaces. Each word consists of lowercase a ...