title: Parallelise python loop with numpy arrays and shared-memory
body: <p>I am aware of several questions and answers on this topic, but haven't found a satisfactory answer to this particular problem:</p>
  
  <p>What is the easiest way to do a simple shared-memory parallelisation of a python loop where numpy arrays are manipulated through numpy/scipy functions?</p>
  
  <p>I am not looking for the most efficient way, I just wanted something simple to implement that doesn't require a significant rewrite when the loop is not run in parallel. Just like OpenMP implements in lower level languages. </p>
  
  <p>The best answer I've seen in this regard is <a href="https://stackoverflow.com/a/5550156/1580351">this one</a>, but this is a rather clunky way that requires one to express the loop into a function that takes a single argument, several lines of shared-array converting crud, seems to require that the parallel function is called from <code>__main__</code>, and it doesn't seem to work well from the interactive prompt (where I spend a lot of my time).</p>
  
  <p>With all of Python's simplicity is this really the best way to parellelise a loop? Really? This is something trivial to parallelise in OpenMP fashion.</p>
  
  <p>I have painstakingly read through the opaque documentation of the multiprocessing module, only to find out that it is so general that it seems suited to everything but a simple loop parallelisation. I am not interested in setting up Managers, Proxies, Pipes, etc. I just have a simple loop, fully parallel that doesn't have any communication between tasks. Using MPI to parallelise such a simple situation seems like overkill, not to mention it would be memory-inefficient in this case.</p>
  
  <p>I haven't had time to learn about the multitude of different shared-memory parallel packages for Python, but was wondering if someone has more experience in this and can show me a simpler way. Please do not suggest serial optimisation techniques such as Cython (I already use it), or using parallel numpy/scipy functions such as BLAS (my case is more general, and more parallel).</p>