Concurrency and parallelism in Python, explained