100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > python3 异步 asyncio aiohttp aiohttp-requests aiofiles 使用

python3 异步 asyncio aiohttp aiohttp-requests aiofiles 使用

时间:2020-01-08 20:18:23

相关推荐

python3 异步 asyncio aiohttp aiohttp-requests aiofiles 使用

asyncio

asyncio 是用来编写并发代码的库,使用async/await语法。

asyncio 被用作多个提供高性能 Python 异步框架的基础,包括网络和网站服务,数据库连接库,分布式任务队列等等。

asyncio 往往是构建 IO 密集型和高层级结构化网络代码的最佳选择。

aiohttp

aiohttp是一个为Python提供异步HTTP 客户端/服务端编程,基于asyncio(Python用于支持异步编程的标准库)的异步库。在爬虫时提供异步网络请求,而常用到的requests库是同步库,不能在异步的环境中使用。

结合asynio和aiohttp的一个基本使用:

import asyncioimport timeimport aiohttpasync def get_info(url):async with aiohttp.ClientSession() as session:async with session.get(url,timeout=5) as resp:if resp.status == 200:print('good')else:print('no')r = await resp.text()if __name__ == '__main__':start = time.time()tasks = []for i in range(100):tasks.append(asyncio.ensure_future(get_info('')))loop = asyncio.get_event_loop()loop.run_until_complete(asyncio.wait(tasks))print('耗时',time.time()-start)

aiohttp-requests

这个库时对aiohttp库的网络请求模块的封装,用了这个库,在异步网络请求的时候,可以在写法上更简洁易懂。本质上还是aiohttp库的使用。推荐使用这个库来做网络请求。

结合asynio和aiohttp-requests 的一个基本使用(和上面的代码效果是一样的):

import asyncioimport timefrom aiohttp_requests import requestsasync def get_info(url):resp = await requests.get(url)if resp.status == 200: # 注意这里是status,不是status_codeprint('good')else:print('no')r = await resp.text()if __name__ == '__main__':start = time.time()tasks = []for i in range(10):tasks.append(asyncio.ensure_future(get_info('')))loop = asyncio.get_event_loop()loop.run_until_complete(asyncio.wait(tasks))print('耗时',time.time()-start)

aiofiles

aiofiles是一个用Python编写,用于处理asyncio应用程序中的本地磁盘文件。爬虫过程中用它来进行文件的异步操作。

官方文档中的基本用法如下:

async with aiofiles.open('filename', mode='r') as f:contents = await f.read()print(contents)'My file contents'

或者:

async with aiofiles.open('filename') as f:async for line in f:...

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。