任务 Task 是和事件循环交互的一个主要方式。任务是在协程里运行的,继承自 Future,所以其他的协程可以等待任务 Task 完成并获取返回值。
开启任务
使用 create_task() 方法创建任务 Task 实例,任务创建后就被事件循环管理,等待执行完后才返回事件循环。
执行:
取消任务
从 create_task() 方法创建任务后,可以调用任务的方法 cancel() 取消任务。
执行:
由于取消了任务,执行到 await 就触发了异常。
任务传递
使用函数 ensure_future() 返回一个任务 Task,它可以传递给其他的协程执行,而不需要知道它的来源。
执行:
并行执行多个协程
协程以线性的方式运行时很容易管理,更复杂的情况是允许一个协程同时等待多个协程。
通常把一个操作分成多个部分,然后分别执行他们,例如从不同的资源下载文件或者查询远端接口 API。这个时候,执行的顺序是不重要的,wait