Concurrency Patterns

Python ConcurrencyFree Lesson

Advertisement

Concurrency Patterns

Producer-consumer, worker pools, and async patterns.

Overview

Master concurrency patterns.

Producer-Consumer

import asyncio
import random

async def producer(queue):
    for i in range(10):
        item = f"item_{i}"
        await queue.put(item)
        print(f"Produced: {item}")
        await asyncio.sleep(random.uniform(0.1, 0.5))
    await queue.put(None)

async def consumer(queue):
    while True:
        item = await queue.get()
        if item is None:
            break
        print(f"Consumed: {item}")
        await asyncio.sleep(random.uniform(0.1, 0.3))
        queue.task_done()

async def main():
    queue = asyncio.Queue()
    producer_task = asyncio.create_task(producer(queue))
    consumer_task = asyncio.create_task(consumer(queue))
    
    await producer_task
    await consumer_task

asyncio.run(main())

Worker Pool

from concurrent.futures import ProcessPoolExecutor
import os

def worker(task):
    return f"Processed {task}"

def main():
    tasks = range(10)
    
    with ProcessPoolExecutor(max_workers=os.cpu_count()) as executor:
        results = list(executor.map(worker, tasks))
    
    print(results)

if __name__ == "__main__":
    main()

Practice

Build a web crawler using async producer-consumer pattern.

Advertisement

Need Expert Python Help?

Get personalized tutoring, project support, or professional consulting.

Advertisement