Last Updated: June 6, 2026
The standard library has two low-level concurrency tools (threading and multiprocessing) and one high-level wrapper that sits on top of both: concurrent.futures. It gives you a single API where you submit work, hold a Future for each piece, and get results back when they finish. The same code shape works whether the workers are threads or processes, so you can switch between them by changing one class name.
This lesson covers the executor interface, the Future object, the helpers for waiting on many futures at once, and when to prefer this module over the raw threading and multiprocessing APIs.