为了解释这个问题的原因:
使用名称相同的两个模块会让人感到困惑,它们代表什么使它们不同?
其中一个可以解决什么任务而另一个不能,反之亦然?
为了解释这个问题的原因:
使用名称相同的两个模块会让人感到困惑,它们代表什么使它们不同?
其中一个可以解决什么任务而另一个不能,反之亦然?
asyncio
文档介绍了以下区别:
class
asyncio.Future(*, loop=None)
这个类与
concurrent.futures.Future
几乎兼容。区别:
result()
和exception()
不接受超时参数,并在Future未完成时引发异常。- 使用
add_done_callback()
注册的回调始终通过事件循环的call_soon_threadsafe()
调用。- 这个类不兼容
concurrent.futures
包中的wait()
和as_completed()
函数。这个类不是线程安全的。
基本上,如果您正在使用ThreadPoolExecutor
或ProcessPoolExecutor
,或者希望直接使用Future
进行基于线程或进程的并发,请使用concurrent.futures.Future
。 如果您正在使用asyncio
,请使用asyncio.Future
。
add_done_callback()
,否则它不是线程安全的? - sargasasyncio.Future
完全不是线程安全的,它只设计为在单线程的 asyncio
应用程序中使用。如果你想从事件循环线程之外的线程调用 asyncio.Future
上的方法,你需要使用 loop.call_soon_threadsafe
。 - dano来自文档:
asyncio
提供的Future类与concurrent.futures模块中的一致,但适用于事件循环。
asyncio.futures.Future
的文档字符串。 - chepner
asyncio
的代码中使用concurrent.futures Future
对象的任何人,可以使用asyncio.wrap_future来包装Future
对象,使它们成为可等待对象。 - plafer