12.2task取消和子协程调用原理

Posted zydeboke

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了12.2task取消和子协程调用原理相关的知识,希望对你有一定的参考价值。

task取消

 1 import asyncio
 2 import time
 3 
 4 
 5 async def get_html(sleep_time):
 6     print(waiting)
 7     await asyncio.sleep(sleep_time)
 8     print(done after s.format(sleep_time))
 9 
10 
11 if __name__ == __main__:
12     task1 = get_html(2)
13     task2 = get_html(3)
14     task3 = get_html(3)
15 
16     tasks = [task1, task2, task3]
17 
18     loop = asyncio.get_event_loop()
19 
20     try:
21         loop.run_until_complete(asyncio.gather(*tasks))
22     except KeyboardInterrupt as e:
23         # KeyboardInterrupt 是按Ctrl+C终止程序时抛出的异常
24         # 获取所有的task
25         all_tasks = asyncio.Task.all_tasks()
26         for task in all_tasks:
27             print(cancel task)
28             print(task.cancel())
29         loop.stop()
30         loop.run_forever()
31     finally:
32         loop.close()
waiting
waiting
waiting
cancel task
True
cancel task
True
cancel task
True

 

 

技术图片

技术图片

 

以上是关于12.2task取消和子协程调用原理的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin 协程协程取消 ① ( 协程作用域取消 | 协程作用域子协程取消 | 通过抛出异常取消协程 | Job#cancel 函数 | 自定义异常取消协程 )

Kotlin 协程协程取消 ① ( 协程作用域取消 | 协程作用域子协程取消 | 通过抛出异常取消协程 | Job#cancel 函数 | 自定义异常取消协程 )

Kotlin 协程协程异常处理 ⑤ ( 异常传播的特殊情况 | 取消子协程示例 | 子协程抛出异常后父协程处理异常时机示例 | 异常聚合 | 多个子协程抛出的异常会聚合到第一个异常中 )

Kotlin 协程协程异常处理 ⑤ ( 异常传播的特殊情况 | 取消子协程示例 | 子协程抛出异常后父协程处理异常时机示例 | 异常聚合 | 多个子协程抛出的异常会聚合到第一个异常中 )

深潜Koltin协程:Job 和等待子协程

go语音之进阶篇主协程先退出导致子协程没来得及调用