IntroductionCommon problemsOverview and rationaleWhy Python?What is parallel computing?
Figure 1

Serial computation
Figure 2

Parallel computation
Figure 3
serial execution
Figure 4
parallel execution
Figure 5

Figure 6
Shared vs. Distributed memory architecture: the
crucial difference is the bandwidth to shared memory
BenchmarkingA first example with DaskMemory profilingUsing many cores
Figure 1

System monitor
Figure 2

Memory performance
Figure 3
Timings against number of cores
Computing $\pi$Parallelizing a Python applicationUsing Numba to accelerate Python code
Figure 1
Computing Pi
Threads And ProcessesThreadingMultiprocessing
Delayed EvaluationDask Delayed
Figure 1
Dask workflow graph
Figure 2
{.output alt=“boxes and arrows”}
Map and Reduce
Figure 1
A map operation.
Figure 2
A reduction.
Exercise with FractalsThe Mandelbrot and Julia fractals
Figure 1

The whole Mandelbrot set
Figure 2

Zoom in on Mandelbrot set
Figure 3
Benchmarks
Figure 4

Example of a Julia set
AsyncioIntroduction to AsyncioA first programWorking with asyncio
outside Jupyter
Figure 1
Figure 2
Figure 3
timings