赞
踩
这里我们说下Task
1.task是一个python协程对象,是Future类的一个子类,但它不是线程安全的, 它继承了Future的所有的API,但是不包括set_result() 和set_Exception()
2.可以使用高层API asyncio.create_task()创建任务对象,或者可以用低层API loop.create_task()或者loop.ensure_future()创建任务对象
3.相比于协程函数,任务时是有状态的,可以用Task.cancel()进行任务的取消,但是这会触发CancelledError异常,使用cancelled()检查是否取消
这里介绍下Task常用的函数
1.cancel()
前面已经提过了,这个函数可以取消任务,但是会触发CancelledError异常,所有和try-except语句一起使用,但是Task.cancel()不能保证100%能取消任务,如果需要100%取消任务,可以用Future.cancel(),这个函数可以保证100%取消任务
2.done()
当一个被包装的协程既没有触发异常,也没有被取消,意味着他是done,返回True
3. result()
返回任务的执行结果,当任务执行完完毕,则返回包装的协程的结果,或者如果协程引发异常,调用该函数,则会从新引发该异常,如果任务已经取消,则调用此方法引发CancelledError异常,如果Task没执行完,则引发InvalidStateError异常
4. exception()
返回任务的异常信息,触发了什么异常,就返回什么异常,如果任务是正常执行的无异常,则返回None;当任务被取消了,调用这个方法会触发CancelledError异常;当任务没有做完,调用这个方法会触发InvalidStateError异常。
5.add_done_callback(callback)
绑定回调函数,通过add_done_callback()给任务task增加回调函数,当task执行完毕的时候,就会回调该绑定的函数,此方法仅能基于低级回调的代码中使用
6.romoce_done_callback(callback)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。