Indeed. It was probably hard to do because he's using Python which has problems due to its GIL. I myself would have went for Go, whoms CSP model matches this problem perfectly.
He could just run the code in multiple process. Enough with the GIL bullshit.
That would be inefficient because you'd need to allocate extra stack, process datastructures, context switching, etc.
From experience, when you can, it's just better spawning multiple processes over doing multithreading.