python3 异步 asyncio aiohttp aiohttp-requests aiofiles 使用

 asyncio

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

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

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

aiohttp

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

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

import asyncio
import time
 
import aiohttp
async 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('https://www.baidu.com')))
    loop = asyncio.get_event_loop()
    loop.run_until_complete(asyncio.wait(tasks))
    print('耗时',time.time()-start)

aiohttp-requests

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

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

import asyncio
import time
from aiohttp_requests import requests
 
async def get_info(url):
    resp = await  requests.get(url)
    if resp.status == 200:  # 注意这里是status,不是status_code
        print('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('https://www.baidu.com')))
    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:
        ...

 

 

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值