python中async await用法

在Python中,asyncawait是一对配合使用的关键字,用于定义异步函数和在异步函数中等待其他异步操作完成,函数被async修饰,那他就变成一个协程,其可以暂停和恢复

并发 ,并行 ,协程  同步 异步 概念

并发指的是 一个 CPU 同时处理多个程序,但是在同一时间点只会处理其中一个。并发的核心是:程序切换。但是因为程序切换的速度非常快,1 秒钟内可以完全很多次程序切换,肉眼无法感知。

  • 协程(Coroutine):协程是一种轻量级的线程,可以在执行过程中暂停并让出控制权,然后在需要时恢复执行
    使用协程可以更有效地利用系统资源,避免线程切换的开销

并行指的是多个 CPU 同时处理多个程序,同一时间点可以处理多个。

同步:执行 IO 操作时,必须等待执行完成才得到返回结果。
异步:执行 IO 操作时,不必等待执行就能得到返回结果。

asyncio.create_task(coroutine)

总的来说,asyncio.create_task() 用于并发执行多个协程任务,而 asyncio.gather() 用于等待多个协程任务的全部完成,并且可以收集执行结果

asyncio.gather(*coroutines_or_futures, return_exceptions=False) 

async关键字:

async用于定义一个异步函数,表明该函数是一个协程,可以在其中使用await关键字等待其他异步操作完成异步函数的执行不会阻塞事件循环,而是会立即返回一个协程对象。

await关键字:
 

await用于在异步函数内部等待其他协程执行完成,后面通常跟着一个需要等待的协程对象
当遇到await关键字时,事件循环会挂起当前的协程,并执行其他任务,直到等待的协程完成后才会恢复执行当前协程

例子

在Python中,asyncawait是一对配合使用的关键字,用于定义异步函数和在异步函数中等待其他异步操作完成

import asyncio

# 定义一个异步函数
async def greet(name):
    print("Hello, " + name)
    await asyncio.sleep(2)  # 使用异步的sleep函数
    print("Goodbye, " + name)

# 执行异步函数
async def main():
    # 创建任务并发执行
    task1 = asyncio.create_task(greet("码农"))
    task2 = asyncio.create_task(greet("研究僧"))

    # 等待所有任务完成
    await asyncio.gather(task1, task2)

# 运行主函数
if __name__ == "__main__":
    asyncio.run(main())

 

 错误实例

代码 确实是异步的,因为它使用了 asyncioawait,但任务的执行是顺序的,所以它看起来像是同步的行为。这是因为你使用了 await 一个接一个地等待每个任务完成,而不是并发运行多个任务。

import asyncio

# 定义一个异步函数
async def greet(name):
    print("Hello, " + name)
    await asyncio.sleep(2)  # 模拟一个耗时的操作
    print("Goodbye, " + name)

async def main():
    await greet("码农")
    await greet("研究僧")

# 运行主函数
if __name__ == "__main__":
    asyncio.run(main())

原因 

 

 调用异步函数

在 Python 中,异步函数async def 定义的函数)不能像普通函数一样直接调用,而是需要借助**事件循环(Event Loop)**来启动和运行。以下是启动异步函数的多种方式,以及详细的代码示例 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值