python的异步编程async

一、介绍

在Python 3.5中引入了async和await关键字,用于异步编程。async关键字用于定义一个协程(coroutine),而await关键字则用于等待一个协程完成。

注:协程(coroutine)是是一种轻量级的线程,但相对子线程而言,协程更为一般和灵活,在实践中没有子线程那样使用广泛。协程更适合于用来实现彼此熟悉的程序组件,如协作式多任务、异常处理、事件循环、迭代器、无限列表和管道。

二、使用

  1. 异步函数:使用async def定义的函数是异步函数。它们可以包含await关键字,以等待异步操作完成。异步函数在被调用时不会立即执行,而是返回一个协程对象。
  2. await 关键字:在异步函数中,await关键字用于暂停当前协程的执行,等待某个异步操作完成,然后再继续执行。
import asyncio

async def foo():
    print("Foo start")
    await asyncio.sleep(2)  # 模拟耗时操作
    print("Foo end")

async def bar():
    print("Bar start")
    await asyncio.sleep(1)  # 模拟耗时操作
    print("Bar end")

async def main():
    await asyncio.gather(foo(), bar())  # 并发运行foo()和bar()

asyncio.run(main())  # Python 3.7+

 

在上面的示例中,asyncio.run(main())会运行main()函数,而main()函数使用asyncio.gather()来并发运行foo()bar()。在foo()bar()中,await asyncio.sleep()模拟了异步操作,使得在等待的期间可以切换到其他任务。 

另一个例子

import asyncio


async def others():
    print("start")
    await asyncio.sleep(2)
    print('end')
    return '返回值'

async def func():
    print("执行协程函数内部代码")
    # 遇到IO操作挂起当前协程(任务),等IO操作完成之后再继续往下执行。当前协程挂起时,事件循环可以去执行其他协程(任务)。
    response1 = await others()
    print("IO请求结束,结果为:", response1)

    response2 = await others()
    print("IO请求结束,结果为:", response2)


asyncio.run( func() )

 

三、总结

使用async和await关键字可以大大简化异步编程的代码,使其更易于理解和维护。

参考:

python 异步 async/await_python await_零否的博客-CSDN博客

【python】async异步编程_python async_ynliii的博客-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值