What is GIL in Python and How It Impacts Performance
Understand CPython's Global Interpreter Lock, why threads don't speed up CPU-bound code, when to use threading, multiprocessing, and the free-threaded build.
Understand CPython's Global Interpreter Lock, why threads don't speed up CPU-bound code, when to use threading, multiprocessing, and the free-threaded build.
A guide to packaging a Python library with pyproject.toml, building wheels, testing on TestPyPI, and releasing to PyPI using tokens or Trusted Publishing.
Why threading fails for CPU-bound code, and how to use multiprocessing, Pool, and ProcessPoolExecutor to harness every CPU core.
Configure Python logging for production: per-module loggers, dictConfig, JSON logging, request_id with contextvars, QueueHandler, and testing with caplog.
Use pathlib.Path instead of os.path and os to join, split, read, write, and traverse files. Includes comparison table, pytest testing, and common mistakes.
How to use try/except/else/finally, define custom exceptions, raise from, logging, ExceptionGroup, and test exceptions with pytest.
How to use Pydantic v2 for input validation: BaseModel, Field, field_validator, model_validator, strict mode, TypeAdapter and testing with pytest.
Build REST API with FastAPI and Pydantic v2 to block invalid data at the entry point, customize 422 errors, and write tests with pytest.
How to use list, dict, set comprehension and generator expressions in Python for concise and readable code, including common pitfalls and when to return to for loops.
A guide to writing tests with pytest, using fixtures to prepare data, clean up resources, share via conftest.py, and parameterize tests.
Understand how the with statement works, write your own context managers using classes or contextlib, handle exceptions properly, and avoid common pitfalls.
How to create virtual environments, manage packages with pip, and declare Python projects with pyproject.toml, with working examples and common errors.
Learn Python decorators from @ syntax, closure, functools.wraps to parameter-accepting decorators and class-based decorators.
Learn about generators, yield, and how they help process huge files or stream data without loading everything into memory.
Distinguish asyncio and threading in Python with 3 practical questions, helping you choose the right concurrency model for each type of problem.
Learn Python's dataclasses module to write concise data-holding classes that auto-generate __init__, __repr__, __eq__ without boilerplate.
Learn how to use type hints to make Python code clearer, and use mypy to catch type errors before running.