问一个关于 asyncio 的问题,当多个 task 运行,其中一个正确返回后,怎么取消其他协程?
一个简单例子 import asyncio import time
特殊函数
async def get_request(url): print('正在下载',url) # time.sleep(2) 不支持异步的模块 会中断整个的异步效果 await asyncio.sleep(2) print('下载完成',url) return 'page_text'
def parse(task): print(task.result())
start = time.time() urls = ['www.xxx1.com','www.xxx2.com','www.xxx3.com']
tasks = [] #存放多任务 for url in urls: # 调用特殊函数 func = get_request(url)
# 创建任务对象 task = asyncio.ensure_future(func) # 给任务对象绑定回调函数 task.add_done_callback(parse) tasks.append(task)
创建事件循环对象
loop = asyncio.get_event_loop()
执行任务
loop.run_until_complete(asyncio.wait(tasks)) print('总耗时:',time.time()-start) #2.0015313625335693
可以在 get_request 判断任务是否成功,但是如何判断成功之后取消其他任务呢?
谢谢