float64 to float32: Saving memory without losing precision

Why Polars uses less memory than Pandas

Some reasons to avoid Cython

It’s time to stop using Python 3.7

Good old-fashioned code optimization never goes out of style

Who controls parallelism? A disagreement that leads to slower code

Early speed optimizations aren’t premature

Faster hardware is a bad first solution to slow software

Find slow data processing tasks (before your customers do)

Finding performance problems: profiling or logging?

Invasive procedures: Python affordances for performance measurement

The best way to find performance bottlenecks: observing production

Finding performance bottlenecks in Celery tasks

The limits of Python vectorization as a performance technique

Why new Macs break your Docker build, and how to fix it

Pandas vectorization: faster code, slower code, bloated memory

Making pip installs a little less slow

CPUs, cloud VMs, and noisy neighbors: the limits of parallelism

Faster, more memory-efficient Python JSON parsing with msgspec

When Python can’t thread: a deep-dive into the GIL’s impact

Speeding up software with faster hardware: tradeoffs and alternatives

Please stop writing shell scripts

Processing large JSON files in Python without running out of memory

Faster Python calculations with Numba: 2 lines of code, 13× speed-up

The fastest way to read a CSV in Pandas

How vectorization speeds up your Python code

CentOS 8 is dead: choosing a replacement Docker image

Creating a better flamegraph visualization

Why your multiprocessing Pool is stuck (it’s full of sharks!)

It’s time to stop using Python 3.6

More →