-
Python中的函数类型
Python中有四种常见函数类型:
# 1. 普通函数 FunctionType def function(): return 1 # 2. generator function :GeneratorType def generator(): yield 2 # 生成器 # async修饰将普通函数和生成器函数包装成异步函数和异步生成器 # 3. 异步函数(协程) :CoroutineType async def async_function(): return 3 # 4. 异步生成器 : AsyncGeneratorType async def async_function(): yield 4
-
异步函数
直接调用异步函数不会返回结果,而是返回一个
coroutine
对象。协程需要通过其他方式来驱动,可以通过这个协程对象的send方法给协程发送一个值。
在协程函数中,可以通过await语法来挂起自身的协程,并等待另一个协程完成直到返回结果。
async def async_function(): return 1 async def await_coroutine(): result = await async_function() # await只能出现在通过async修饰的函数中;其后是一个awaitable print(result) run(await_coroutine())
-
awaitable类
实现了
__await__
方法的类。 -
AsyncGenerator
需要实现__aiter__、__anext__两个核心方法,以及asend、athro、aclose方法。
-
async/await语法
完成异步的代码不一定要用async/await;
使用了async/await的代码也不一定能做到异步;
async/await是协程的语法糖,使协程之间的调用变得更加清晰:
- 使用async修饰的函数调用时会返回一个协程对象;
- await只能放在async修饰的函数里面使用;
- await后面必须要跟着一个协程对象或者Awaitable;
- await的目的是等待协程控制流的返回;
- 实现暂停并挂起函数的操作的是yield;
-
async作用
常规函数开始执行后一直运行到
return
实现退出,如果需要能够中断的函数,就需要添加async
关键字。async
用来声明一个函数为异步函数,异步函数的特点就是能在函数执行过程中被挂起,去执行其他异步函数,等挂起条件消失后再回来执行。 -
await作用
await
用来声明程序挂起。await
后面只能跟异步程序或有__await__
属性的对象。两个异步程序async a、async b:
- a中一步有await,当程序碰到关键字await b后;
- 异步程序a挂起,去执行异步b程序(就相当于从一个函数内部跳出去执行其他函数);
- 当挂起条件小时候,不管b是否执行完,要马上从b程序中跳出来,回到原程序a执行原来的操作;
如果await后面跟的b函数不是异步函数,那么操作就只能等b执行完再返回,无法在b执行的过程中返回,这样就相当于直接调用b函数,没必要使用await关键字了。
因此,需要await后面跟的是异步函数。
-
Reference
Python异步async/await概念、用法(二)
最新推荐文章于 2025-03-06 03:34:54 发布