Python学习---IO的异步[asyncio +aiohttp模块]
Posted 小a玖拾柒
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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()
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()
以上是关于Python学习---IO的异步[asyncio +aiohttp模块]的主要内容,如果未能解决你的问题,请参考以下文章
Python学习---Python的异步---asyncio模块(no-http)
Python并发编程之初识异步IO框架:asyncio 上篇