The with statement in concurrent programming
Obviously, opening and closing external files does not resemble concurrency very much. However, we mentioned earlier that the with
statement, as a context manager, is not only used to manage file descriptors, but most resources in general. And if you actually found managing lock objects from the threading.Lock()
class similar to managing external files while going through Chapter 9, Amdahl's Law, then this is where the comparison between the two comes in handy.
As a refresher, locks are mechanisms in concurrent and parallel programming that are typically used to synchronize threads in a multithreaded application (that is, to prevent more than one thread from accessing the critical session simultaneously). However, as we will discuss again in Chapter 20, Starvation, locks are also a common source of deadlock, during which a thread acquires a lock but never releases it because of an unhandled occurrence, thereby stopping the entire program.