Summary
In this chapter, we looked comprehensively at multiprocessing, and how it can be utilized within our systems. We followed the life of a process from its creation all the way through to its timely termination.
We looked at the various intricacies such as cross-process communication and synchronization, and we also looked at how your standard multiprocessing pools differ from the standard ProcessPoolExecutors
that we explored in Chapter 7, Executors and Pools.
We then took a brief look at how we can implement things such as communication and synchronization between our various processes without incurring major performance penalties, or becoming the proud owners of systems plagued by race conditions.
In the next chapter, Event-driven programming, we'll be diving deep into the asyncio
module, and understand how we can leverage this module in order to develop our own event-based Python programs.