concurrent.futures和asyncio.futures有什么区别?

sar*_*gas 25 python module python-3.x python-asyncio concurrent.futures

澄清这个问题的原因:

  1. 使用两个具有相同名称的模块令人困惑.它们代表什么使它们与众不同?

  2. 什么任务可以解决另一个不能,反之亦然?

dan*_*ano 16

asyncio文件涵盖了不同之处:

asyncio.Future(*, loop=None)

这个类几乎兼容concurrent.futures.Future.

区别:

  • result()并且exception()不要采用超时参数并在未来尚未完成时引发异常.
  • 注册的回调add_done_callback()总是通过事件循环调用call_soon_threadsafe().
  • 此类与包中的wait()as_completed()函数不兼容concurrent.futures.

这个类不是线程安全的.

基本上,如果您正在使用ThreadPoolExecutor或者ProcessPoolExecutor想要Future直接使用基于线程或基于进程的并发,请使用concurrent.futures.Future.如果您正在使用asyncio,请使用asyncio.Future.

  • `asyncio.Future`根本不是线程安全的 - 它只被设计用于基于`asyncio`的单线程应用程序.如果要从事件循环线程之外的线程调用`asyncio.Future`上的方法,则需要使用`loop.call_soon_threadsafe`. (3认同)
  • 所以它不是线程安全的,除非你使用`add_done_callback()`? (2认同)