Develop efficient parallel systems using the robust Python environment
If you are an experienced Python programmer and are willing to utilize the available computing resources by parallelizing applications in a simple way, then this book is for you. You are required to have a basic knowledge of Python development to get the most of this book.
Starting with the basics of parallel programming, you will proceed to learn about how to build parallel algorithms and their implementation. You will then gain the expertise to evaluate problem domains, identify if a particular problem can be parallelized, and how to use the Threading and Multiprocessor modules in Python. The Python Parallel (PP) module, which is another mechanism for parallel programming, is covered in depth to help you optimize the usage of PP. You will also delve into using Celery to perform distributed tasks efficiently and easily. Furthermore, you will learn about asynchronous I/O using the asyncio module. Finally, by the end of this book you will acquire an in-depth understanding about what the Python language has to offer in terms of built-in and external modules for an effective implementation of Parallel Programming. This is a definitive guide that will teach you everything you need to know to develop and maintain high-performance parallel computing systems using the feature-rich Python.
Parallel Programming is an increasingly hot topic in today’s IT circles. For those who ponder why I can tell in short it is because of the CPU clock speeds stagnation. We, software engineers, are dealing with ever increasing volumes of data and are asked to deliver even faster, more robust applications and websites. This is tough. Parallel Programming is the answer. I hope I whet your appetite for exploring the Parallel Programming so now I can switch the focus to the book. It is not terribly long. Not costly either. In fact if you care I managed to read it whole in 3 hours plus (stats are from my ebook reader app) and managed to run a few examples that worked on my laptop with Windows 7. I am planning on running more examples later on a POSIX machine. Thing with the examples is they are classic ones: the Fibonacci series which is boring to me and far from what anybody would be dealing with at work and web crawling which is better done using say Nutch. The same code examples go through the entire book, just different techniques applied. What I wish Jan had done is explaining at least what technique helps in what case in real life. My other pet peeves are that there was no mention on how to leverage the GPU, how to eliminate the For Loops – this is actually a must in my opinion, and there was no coverage on how to debug parralel processes. Let me stop at debugging a tad longer: since Python allows mutability it becomes critical to exterminate nasty mutation bugs! In terms of closing, I have an advice to the author: it is hard to write a technical book, but I wish it could be longer and covered more ground. Also concentrate better on the English grammar and have proof reading done.
Parallel Programming is a hot subject and for good reason, we are only getting faster. I've used C++ multi-thread architecture which is quite similar to python. Locking and unlocking threads can get confusing but you always have to keep things organized and you won't get in too much trouble. I don't mind some theory on what I'm getting ready to learn and eventually apply, this is expected for an entry level book. Which I felt others didn't seem to keep in mind, not everything will be covered, this leaves room for more advanced books to be written. Shared state to messaging state were covered just enough for my taste but I could see how others would want a more elaborate explanation. Deadlock, Starvation, and Race Conditions were covered which are the most common issues faced when parallel programming. I remember when just the term alone would cause panic in the room, but now it's nothing more then logically arranging your application to use workers to achieve a desired result, with concurrent operations which impact the overall speed of the application.
This is clearly shown when you get into the concurrent.futures section of the book, which I enjoyed very much. You have complete control over what occurs, until the system out grows your brain is now a full fledged API with a user manual! :) I really enjoyed Chapter 8, all of the re-factoring code to utilize a library was pretty cool to walk over and participate in. I'm still not an expert in Python but this book really gives you a reason to learn parallel programming in order to future-proof yourself and your code base.
I would say this book is good for beginners who never tried parallel/concurrent programming in Python. Author is introducing few libraries and modules for this purpose such as threading, multiprocessing, pp, celery, concurrent.futures and asyncio. There are two example problems solved using each of the mentioned libraries/modules above with detailed description, so reader can compare their capabilities. Unfortunately I don't think that this book would be useful for intermediate programmer, because libs/modules are not described in more detail.
The author pretended to cover a lot of topics in only 100 or so pages. I found everything pretty messy. It wasn't the best experience reading the book.