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()
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, 'http://www.cnblogs.com/ftl1012/'), 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()