Search code examples
pythonpython-3.xmodulepython-asyncioconcurrent.futures

What is the difference between concurrent.futures and asyncio.futures?


To clarify the reason for this question:

  1. It is confusing to use two modules with the same name. What do they represent that makes them distinct?

  2. What task(s) can one solve that the other can't and vice-versa?


Solution

  • The asyncio documentation covers the differences:

    class asyncio.Future(*, loop=None)

    This class is almost compatible with concurrent.futures.Future.

    Differences:

    • result() and exception() do not take a timeout argument and raise an exception when the future isn’t done yet.
    • Callbacks registered with add_done_callback() are always called via the event loop’s call_soon_threadsafe().
    • This class is not compatible with the wait() and as_completed() functions in the concurrent.futures package.

    This class is not thread safe.

    Basically, if you're using ThreadPoolExecutor or ProcessPoolExecutor, or want to use a Future directly for thread-based or process-based concurrency, use concurrent.futures.Future. If you're using asyncio, use asyncio.Future.