Python学习---IO的异步[asyncio +aiohttp模块]


aiohttp

aiohttp是在asyncio模块基础上封装的一个支持HTTP请求的模块,内容比8.4.2【基于asyncio实现利用TCP模拟HTTP请求】更全面

安装aiohttp:

pip3 install aiohttp

asyncio + aiohttp实现异步请求【有问题】

import aiohttp
import asyncio
@asyncio.coroutine
def fetch_async(url):
print(url)
response = yield from aiohttp.request('GET', url)
# data = yield from response.read()
# print(url, data)
print(url, response)
response.close()
tasks = [fetch_async('http://www.cnblogs.com/'), fetch_async('http://www.chouti.com/')]
event_loop = asyncio.get_event_loop()
results = event_loop.run_until_complete(asyncio.gather(*tasks))
event_loop.close()

Python学习---IO的异步[asyncio +aiohttp模块]_封装

asyncio + requests完成IO异步

asyncio + requests完成IO异步

import asyncio
import requests
@asyncio.coroutine
def fetch_async(func, *args):
# 获取事件循环:就是有个循环一直等待这用户的响应
loop = asyncio.get_event_loop()
future = loop.run_in_executor(None, func, *args) # 执行传递进来的get函数
response = yield from future
print(response.url, response.content)
tasks = [
fetch_async(requests.get, 'javascript:void(0)'),
fetch_async(requests.get, 'http://dig.chouti.com/images/homepage_download.png')
]
loop = asyncio.get_event_loop()
results = loop.run_until_complete(asyncio.gather(*tasks))
loop.close()


Python学习---IO的异步[asyncio +aiohttp模块]_javascript_02


作者:​​小a玖拾柒​​​ ​

-------------------------------------------

个性签名: 所有的事情到最後都是好的,如果不好,那說明事情還沒有到最後~

本文版权归作者【​​小a玖拾柒​​​】,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利!