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

时间:2015-04-27 18:04:41

标签: python python-3.x module python-asyncio concurrent.futures

澄清这个问题的原因:

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

  2. 可以解决对方无法解决的任务,反之亦然?

2 个答案:

答案 0 :(得分:15)

asyncio documentation涵盖了差异:

  

班级asyncio.Future(*, loop=None)

     

此课程几乎与concurrent.futures.Future兼容。

     

的差异:

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

此类不是线程安全的。

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

答案 1 :(得分:2)

来自docs

  

[asyncio提供了一个] Future类,它模仿concurrent.futures模块中的那个,但适用于事件循环;