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()

image

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()

 

image

以上是关于Python学习---IO的异步[asyncio +aiohttp模块]的主要内容,如果未能解决你的问题,请参考以下文章

Python学习---Python的异步---asyncio模块(no-http)

透彻学习Python异步编程——模块asyncio之基础篇

转-python异步IO-asyncio

Python并发编程之初识异步IO框架:asyncio 上篇

Python黑魔法 --- 异步IO( asyncio) 协程

Python黑魔法 --- 异步IO( asyncio) 协程