With multiprocessing, only one thread can actually be modifying Python objects or running Python code at any given time. This does allow you for CPU intensive things to basically use all of the available cores on your system. In this case, essentially, what happens is it spawns a child process or forks the child process on Linux. And then it uses a pickle module in order to send data back and forth between the two.