Summary
And so we’ve reached the end of our journey. That journey began with a conceptual review of how computers handle multiple operations, and we then walked through the features and incremental improvements made to Python to manage concurrent operations: capabilities like multiprocessing, multithreading, generators and coroutines. After that we reviewed some of the main patterns, pitfalls and other considerations to bear in mind when dealing with asynchronous workloads. With those concepts and basic constructs in place, we explored several asynchronous-enabled solutions for different contexts, including web applications and relational and non-relational data access, as well as data pipelines.
In this last chapter we have explored the application of asynchronous programming techniques in an interactive environment that implements the literate programming paradigm – computational notebooks – which has been proposed as a solution to giving context about software...