python协程asyncio执行_Python 模块 asyncio-并发执行多个协程

任务 Task 是和事件循环交互的一个主要方式。任务是在协程里运行的,继承自 Future,所以其他的协程可以等待任务 Task 完成并获取返回值。

开启任务

使用 create_task() 方法创建任务 Task 实例,任务创建后就被事件循环管理,等待执行完后才返回事件循环。

执行:

取消任务

从 create_task() 方法创建任务后,可以调用任务的方法 cancel() 取消任务。

执行:

由于取消了任务,执行到 await 就触发了异常。

任务传递

使用函数 ensure_future() 返回一个任务 Task,它可以传递给其他的协程执行,而不需要知道它的来源。

执行:

并行执行多个协程

协程以线性的方式运行时很容易管理,更复杂的情况是允许一个协程同时等待多个协程。

通常把一个操作分成多个部分,然后分别执行他们,例如从不同的资源下载文件或者查询远端接口 API。这个时候,执行的顺序是不重要的,wait() 方法支持暂停一个协程然后等待多个协程完成操作。

执行:

wait() 返回的是一个元组,分别是已完成的和未完成的任务。本例最后打印了已完成任务的结果,可以看到,返回结果的顺序是不定的。

wait() 可以接收一个超时值。

执行:

本例中,wait() 函数使用关键字参数 timeout 设置超时值为 0.1,其中有两个协程超时了,然后取消了这两个协程。

只获取数据

如果只是获取多个后台协程的返回的数据,调用 gather() 也是很方便的。

执行:

和 wait() 不同的是,gather() 只是返回结果,不返回协程对象,所以也不能取消。返回的结果和传递给 gather() 的参数的顺序是一致的。

按完成顺序返回

方法 as_completed() 和 wait() 一样,不按顺序返回结果。as_completed() 从一个协程列表返回一个生成器,会按顺序每次执行一个协程,执行时间短的先返回。

执行:

你可能感兴趣的:(python协程asyncio执行_Python 模块 asyncio-并发执行多个协程)