Skip to content

concurrent Module

The concurrent module provides high-level interfaces for asynchronous execution with threads or processes through Executors and Futures.

Complexity Reference

Operation Time Space Notes
Executor setup O(1) O(n) n = workers
Submit task O(1) O(1) Queue work
Wait for results O(n) O(n) n = tasks

Thread and Process Pools

ThreadPoolExecutor

from concurrent.futures import ThreadPoolExecutor
import time

def task(name, duration):
    time.sleep(duration)
    return f"{name} done"

# Create executor - O(1)
with ThreadPoolExecutor(max_workers=3) as executor:
    # Submit tasks - O(1) each
    futures = [
        executor.submit(task, f"Task{i}", i)
        for i in range(5)
    ]

    # Wait for all - O(n)
    results = [f.result() for f in futures]
    print(results)

ProcessPoolExecutor

from concurrent.futures import ProcessPoolExecutor

def cpu_task(n):
    return sum(i*i for i in range(n))

# Create executor - O(1)
with ProcessPoolExecutor(max_workers=4) as executor:
    # Submit - O(1) each
    futures = [
        executor.submit(cpu_task, 10**6 + i)
        for i in range(4)
    ]

    # Get results - O(n)
    results = [f.result() for f in futures]