Rewriting to async made throughput worse

Back to list2026-06-23
You

Rewriting to async made throughput worse.

ChatGPT

Something synchronous is running inside the event loop, usually a blocking library call or CPU work. One blocking call stalls every other task on that loop. Run those in a thread executor, and measure with a loop-lag metric so the next one is visible immediately.

You
monthly-requests.png
You

Four threads and the CPU-bound job takes the same time.

ChatGPT

The interpreter lock serialises bytecode execution, so threads help with waiting, not with computing. Processes are the fix for CPU-bound work:

from concurrent.futures import ProcessPoolExecutor

with ProcessPoolExecutor() as pool:
    results = list(pool.map(work, items, chunksize=64))

chunksize matters more than the worker count: without it, small tasks spend all their time being serialised between processes.

You

What would you skip entirely?

ChatGPT

The reporting layer, until something forces it. It is the part that feels productive to build and the part nobody opens twice.