Without trying to dig into more reason, the first obvious one which came to mind is the poor multi-threading support in Python (and don’t get me wrong, I love Python), and how one has to deal with the global interpreter lock and everything... which is why usually (e.g. Django or Flask) delegate that os-thread management to some external resource (let’s call it a supervisor). A very good example is Gunicorn . It acts as an adapter, exposing WSGI interface (so that you can use it with NGINX of other frontends), and manages your Python for you (e.g. start multiple times the flask app in different threads)
There might be many other good reasons. But this first one is already enough for me ;-) (And that’s where the great built-in concurrency features of Go let you do that stuff without having to delegate it)