这两个类都是并发编程的优秀抽象,但有点令人不安的是它们不支持相同的API。
具体来说,根据docs:
asyncio.Future几乎与concurrent.futures.Future兼容。
差异:
- result()和exception()不接受超时参数,并在未完成future时引发异常。 - 使用add_done_callback()注册的回调始终通过事件循环的call_soon_threadsafe()调用。 - 该类与concurrent.futures包中的wait()和as_completed()函数不兼容。
上面的列表实际上是不完整的,还有一些差异。
具体来说,根据docs:
asyncio.Future几乎与concurrent.futures.Future兼容。
差异:
- result()和exception()不接受超时参数,并在未完成future时引发异常。 - 使用add_done_callback()注册的回调始终通过事件循环的call_soon_threadsafe()调用。 - 该类与concurrent.futures包中的wait()和as_completed()函数不兼容。
上面的列表实际上是不完整的,还有一些差异。
running()
方法不存在result()
和exception()
如果过早调用可能会引发InvalidStateError
这些问题是否由事件循环的固有特性造成,使得这些操作要么无用,要么太麻烦而不值得实现?
关于 add_done_callback()
的差异是什么意思?无论哪种方式,回调都保证在未来某个不确定的时间发生,因此在这两个类之间完全一致,是吗?