赞
踩
在Python 3.5中引入了async和await关键字,用于异步编程。async关键字用于定义一个协程(coroutine),而await关键字则用于等待一个协程完成。
注:协程(coroutine)是是一种轻量级的线程,但相对子线程而言,协程更为一般和灵活,在实践中没有子线程那样使用广泛。协程更适合于用来实现彼此熟悉的程序组件,如协作式多任务、异常处理、事件循环、迭代器、无限列表和管道。
- 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关键字可以大大简化异步编程的代码,使其更易于理解和维护。
参考:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。