title: multiprocessing to a python function
body: <p>How I can implement the multiprocessing to my function.I tried like this but did not work. </p>
  
  <pre><code>def steric_clashes_parallel(system):
      rna_st = system[MolWithResID("G")].molecule()
      for i in system.molNums():
          peg_st = system[i].molecule()
          if rna_st != peg_st:
              print(peg_st)
              for i in rna_st.atoms(AtomIdx()):
                  for j in peg_st.atoms(AtomIdx()):
  #                    print(Vector.distance(i.evaluate().center(), j.evaluate().center()))
                      dist = Vector.distance(i.evaluate().center(), j.evaluate().center())
                      if dist&lt;2:
                          return print("there is a steric clash")
      return print("there is no steric clashes")  
  
  mix = PDB().read("clash_1.pdb")
  system = System()
  system.add(mix)    
  from multiprocessing import Pool
  p = Pool(4)
  p.map(steric_clashes_parallel,system)
  </code></pre>
  
  <p>I've thousand of pdb or system files to test through this function. It took 2 h for one file on a single core without multiprocessing module. Any suggestion would be great help. </p>
  
  <p>My traceback looks something like this:</p>
  
  <pre class="lang-none prettyprint-override"><code>self.run()
  File "/home/sajid/sire.app/bundled/lib/python3.3/threading.py", line 858,
    in run self._target(*self._args, **self._kwargs)
      File "/home/sajid/sire.app/bundled/lib/python3.3/multiprocessing/pool.py", line 351,
        in _handle_tasks put(task)
          File "/home/sajid/sire.app/bundled/lib/python3.3/multiprocessing/connection.py", line 206,
            in send ForkingPickler(buf, pickle.HIGHEST_PROTOCOL).dump(obj)
  RuntimeError: Pickling of "Sire.System._System.System" instances is not enabled
  (boost.org/libs/python/doc/v2/pickle.html)
  </code></pre>