Under some circumstances, it is not possible to implement the desired functionality for your application just by using threads. For instance, you might want to call a separate program that could be written in a different language.
In this case, we also need to use the subprocess module to invoke the target program from our Python process.