title: What is the difference between ProcessPoolExecutor and ThreadPoolExecutor?
body: <p>I read the docs trying to get a basic understanding but it only shows that <code>ProcessPoolExecutor</code> allows to side-step the <code>Global Interpreter Lock</code> which I think is the way to lock a variable or function so that parallel processes do not update its value at the same time.</p>
  
  <p>What I am looking for is when to use <code>ProcessPoolExecutor</code> and when to use <code>ThreadPoolExecutor</code> and what should I keep in mind while using each approach!</p>