asyncio异步IO--协程(Coroutine)与任务(Task)详解 (6)

返回Task的执行结果。
如果Task已经完成,则返回Task封装的协程的执行结果(如果Task封装的协程引发异常,则重新引发该异常)。
如果Task已经取消,则该方法引发CancelledError异常。
如果Task的结果还不可用,该方法引发InvalidStateError异常。

exception()

返回Task的异常。
如果封装的协程引发了异常,则返回此异常。如果封装的协程执行正常,则返回None。
如果Task已被取消,则引发CancelledError异常。
如果Task尚未完成,则引发InvalidStateError异常。

add_done_callback()

添加一个回调函数,在Task完成后执行。
这个方法只应用在基于回调的底层编程中。
具体细节可以参考

get_stack(* ,limit=None)

返回此Task的堆栈帧列表。

如果封装的协程未完成,此方法返回它暂停位置的堆栈。

如果封装的协程已经完成或已被取消,此方法返回一个空的列表。

如果封装的协程因异常而结束,此方法返回异常回溯列表。

帧的顺序总是 由旧到新
暂停中的协程只返回一个堆栈帧。
可选参数limit用于限定返回帧的最大数目。默认情况下,所有有效的帧都会返回。
在返回堆栈和返回异常回溯时,列表的顺序会有所不同:

最新的堆栈帧会被返回

最老的回溯帧会被返回(这和异常回溯模块的机制有关)

print_stack(* ,limit=None,file=None)

打印Task的栈帧或异常回溯。
此方法用于输出由get_stack()取回的帧列表,输出形式类似于回溯(traceback)模块
limit参数会直接传递给get_stack()。
file参数指定输出的I/O流,默认为sys.stderr。

classmethod all_tasks(loop=None)

返回一个事件循环上所有任务的集合。
默认情况下,当前事件循环上所有的任务都会被返回。如果loop参数为'None',则通过get_event_loop()方法获取当前事件循环。

此方法将在Python3.9中被移除,所以不建议使用。可以使用asyncio.all_tasks()代替。

calssmethod current_task(loop=None)

返回当前正在运行的Task或None。
如果loop参数为'None',则通过get_event_loop()方法获取当前事件循环。
此方法将在Python3.9中被移除,所以不建议使用。可以使用asyncio.current_task()代替。

基于生成器的协程(Generator-based Coroutines)

提示:对基于生成器的协程的支持将在Python3.10中移除,不建议使用。
基于生成器的协程是早期的异步实现方式,出现在async/await语法之前,使用yield from表达式等待Future或其他协程。
基于生成器的协程应该用@asyncio.coroutine来修饰,尽管这不是强制的。

@asyncio.coroutine

基于生成器的协程的修饰器。
这个修饰器能使传统的基于生成器的协程与async/await语法兼容:

@asyncio.coroutine def old_style_coroutine(): yield from asyncio.sleep(1) async def main(): await old_style_coroutine()

此修饰器将在Python3.10中被移除,所以不建议再使用。
此修饰器不能用于async def的协程中。

asyncio.iscoroutine(obj)

如果obj对象是一个coroutine对象,则返回True。
此方法与inspect.iscoroutine()不同,因为它对基于生成器的协程也返回True。

asyncio.iscoroutinefunction(func)

如果func是一个coroutine方法,则返回True。
此方法inspect.iscoroutinefunction()不同,因为它对用@coroutine修饰的基于生成器的协程也返回True。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyzspx.html