如何将异常引入任务?

时间:2018-12-13 03:25:08

标签: python python-asyncio

asyncio.Task仅提供一种用于将空CancelledError放入任务的方法。但是,有时可能需要具有不同类型的中断。例如,类似于SIGINT,SIGTERM和SIGKILL,取消的多个级别可以使任务进行更好的清除。

asyncio.Task本身可以轻松进行修改以提供此类功能。问题是,如何以更优雅,更有效的方式做到这一点?

1 个答案:

答案 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')

您可以在相关的PRissue中阅读此决定背后的讨论。

据我了解,支持set_result / set_exception的东西催生了太多让自己陷入困境的方法,例如,参见this讨论。