协程asyncio基础

1.aiohttp基本用法:

async def get_html(url):
    timeout = aiohttp.ClientTimeout(total=2)   #设置超时时间
    proxy = ""
    async with aiohttp.ClientSession(headers=headers, timeout=timeout) as session:
        async with session.get(url, params=params, proxy=proxy) as response:
            print("res:", await response.text())

if __name__ == '__main__':
    url = ''
    loop = asyncio.get_event_loop()
    loop.run_until_complete(get_html(url))

#在python3.7及以上的版本中 推荐使用asyncio.run() 的方式直接启动协程,不用显式的创建事件循环

#这里提示一下,很多初学者可能会遇到的问题:python文件名与导入的模块名冲突,导致不能使用模块中的方法。 

2.另一种启动协程的方式:

在创建事件循环的时候,我们可以显式的创建任务,然后注册到事件循环当中执行。具体代码如下:

tasks = [asyncio.ensure_future(get_html(url) for i in range(1000))]
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(tasks))

3.asyncio.wait的用法及一些解释

在Python的asyncio库中,asyncio.wait是一个低级别的用于等待asyncio任务(Task)完成的函数。它用于并发运行多个协程,并在它们完成时提供更细粒度的控制。当你有多个异步操作需要同时执行,并且你想在它们完成后做一些处理时,这个函数非常有用。

使用asyncio.wait:

asyncio.wait接受一个由asyncio任务或协程组成的集合(通常是一个set),并返回两个集合:一个是已完成的任务集合,另一个是未完成的任务集合。它允许你指定多个不同的选项来控制其行为,例如设置超时时间,以及控制何时返回。

基本语法如下:

done, pending = await asyncio.wait(tasks, timeout=None, return_when=ALL_COMPLETED)
  • tasks:一个由asyncio任务或协程对象组成的集合。
  • timeout:可选参数,指定等待所有任务完成的最大秒数。
  • return_when:决定asyncio.wait何时返回。它可以是asyncio.ALL_COMPLETED(默认值,等待所有任务完成)、asyncio.FIRST_COMPLETED(第一个任务完成时返回)或asyncio.FIRST_EXCEPTION(第一个任务抛出异常时返回)。

4.asyncio.gather

asyncio.gather是Python中asyncio库提供的一个高级接口,用于并发运行多个异步可等待对象(通常是协程),并在它们全部完成时收集所有结果。与asyncio.wait相比,gather更高级、使用起来更简单直观,特别是当你需要所有任务的返回结果时。

使用asyncio.gather基本语法如下:

results = await asyncio.gather(*tasks, return_exceptions=False)

  • *tasks:一个或多个异步可等待对象,如协程。
  • return_exceptions:可选参数,默认为False。如果设置为True,则异常会被正常返回而不是抛出,这样你可以在结果中区分成功和失败的任务。

asyncio.gather会等待传入的所有任务完成,并按照传入任务的顺序返回一个包含所有结果的列表。如果任何一个任务抛出异常,gather将会取消所有其他任务(除非return_exceptions=True)并将异常向上抛出。

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值