https://thecodecadence.medium.com/multithreading-asynchronous-or-synchronous-python-when-and-why-to-use-each-36c7ed55fb05