Python originally was not written with either concurrency or parallelism in mind at all. There were no threads only a small number of years into Python's initial development. The global interpreter lock solves the problem that python originally wasn't written to do so. people enjoy that kind of paradigm programming for asynchronous IO relative to callbacks.