Parallel processing is an effective way to increase the speed of your programs or to handle large amounts of data. Embarassingly parallel problems are excellent candidates for parallelization and lead to a straightforward implementation and optimal scaling.
In this chapter, we illustrated the basics of parallel programming in Python. We learned how to use multiprocessing to easily parallelize programs with the tools already included in Python. Another more powerful tool for parallel processing is IPython parallel. This package allows you to interactively prototype parallel programs and manage a network of computing nodes effectively. Finally, we explored the easy-to-use multithreading capabilities of Cython and OpenMP.
During the course of this book, we learned the most effective techniques to design, benchmark, profile, and optimize Python applications. NumPy can be used to elegantly rewrite Python loops, and if it is not enough, you can use Cython to generate efficient C code. At...