码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-08-05 11:55:18      阅读:230      评论:0      收藏:0      [点我收藏+]

标签:yield   封装   事件   isp   load   bar   blog   width   requests   

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模块]

标签:yield   封装   事件   isp   load   bar   blog   width   requests   

原文地址:https://www.cnblogs.com/ftl1012/p/9424792.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!