Skip to content
BytePatterns

Thread Pools

Concurrency: lesson 5 of 15

Hire the workers once, reuse them all day.

Lesson 5 of 15 · 4 min

Thread Pools

Step 1 of 9

Two workers, created once. Four pages wait in the queue — not four threads.

The Idea

A thread pool keeps a fixed crew of workers alive and feeds them tasks from a queue. Threads are created once, not per task, and the pool size is a deliberate cap on how much work runs at once.

Real-World Example

A ceramics studio owns three kilns. Pots queue on the shelf and go in as kilns free up; the kilns are never demolished after a firing and never rebuilt for the next one. Hiring a fourth potter does not fire a single extra pot.

The Code

from concurrent.futures import ThreadPoolExecutor

def fetch_size(page):
    return page, len(page) * 100      # stands in for a slow network call

pages = ["index", "about", "pricing", "faq"]

with ThreadPoolExecutor(max_workers=2) as pool:
    # two workers, four tasks; map hands results back in input order
    for page, size in pool.map(fetch_size, pages):
        print(page, size)

Python

Your turn

What does this print?

from concurrent.futures import ThreadPoolExecutor

def double(n):
  return n * 2

with ThreadPoolExecutor(max_workers=3) as pool:
  out = list(pool.map(double, [1, 2, 3, 4]))

print(out)

Mini quiz

1 / 3

A pool exists mainly to:

New lessons land every few weeks

Leave an address and we will tell you when the next one is up. That is the only reason we will use it.

One address, stored so we can email you. Nothing else, ever.