asyncio.Task
仅提供一种用于将空CancelledError
放入任务的方法。但是,有时可能需要具有不同类型的中断。例如,类似于SIGINT,SIGTERM和SIGKILL,取消的多个级别可以使任务进行更好的清除。
asyncio.Task
本身可以轻松进行修改以提供此类功能。问题是,如何以更优雅,更有效的方式做到这一点?
答案 0 :(得分:1)
我asyncio很久以前就提供了这样的功能,但是它被切断了。
现在在文档中,您可以read:
asyncio.Task从Future继承其所有API,但 Future.set_result()和Future.set_exception()。
在异步source code中,您可以看到:
def set_exception(self, exception):
raise RuntimeError('Task does not support set_exception operation')
据我了解,支持set_result
/ set_exception
的东西催生了太多让自己陷入困境的方法,例如,参见this讨论。