I am learning how to use the threading and the multiprocessing modules in Python to run certain operations in parallel and speed up my code. I am finding it hard (maybe because I don't have any theoretical background about it) to understand what the difference is between a threading.Thread() object and a multiprocessing.Process() one. Also, it is not entirely clear to me how to instantiate a queue of jobs and have only 4 (for example) of them running in parallel, while the others wait for resources to free before being executed. I find the examples in the documentation clear, but not very exhaustive; as soon as I try to complicate things a bit, I receive a lot of weird errors (like a method that can't be pickled, and so on). So, when should I use the threading and multiprocessing modules? Can you link me to some resources that explain the concepts behind these two modules and how to use them properly for complex tasks? Continue reading...