Summary
In this chapter, we took a look at how the performance of an application is an important aspect of the software's development and what kind of issues usually cause performance bottlenecks to appear in the application. Moving forward, we took a look at the different ways in which we can profile an application for performance issues. This involved, first the writing of benchmark tests for individual components as well as the individual APIs and then moving to more specific, component-level analysis, where we took a look at different ways of profiling the components. These profiling techniques included the use of simple timing profiles of methods using the Python timeit
module, then we moved on to using more sophisticated techniques with Python cProfile and covered memory profiling. Another topic we took a look at during our journey is the use of logging techniques to help us evaluate slow requests whenever we want. Finally, we took a look at some of the general principles that can...