title: Python multiprocessing synchronization
body: <p>I have a function "function" that I want to call 10 times using 2 times 5 cpus with multiprocessing.</p>
  
  <p>Therefore I need a way to synchronize the processes as described in the code below.</p>
  
  <p>Is this possible without using a multiprocessing pool? I get strange errors if I do so (for example "UnboundLocalError: local variable 'fd' referenced before assignment" (I don't have such a variable)). Also the processes seem to terminate randomly.</p>
  
  <p>If possible I would like to do this without a pool. Thanks!</p>
  
  <pre><code>number_of_cpus = 5
  number_of_iterations = 2
  
  # An array for the processes.
  processing_jobs = []
  
  # Start 5 processes 2 times.
  for iteration in range(0, number_of_iterations):
  
      # TODO SYNCHRONIZE HERE
  
      # Start 5 processes at a time.
      for cpu_number in range(0, number_of_cpus):
  
          # Calculate an offset for the current function call.
          file_offset = iteration * cpu_number * number_of_files_per_process
  
          p = multiprocessing.Process(target=function, args=(file_offset,))
          processing_jobs.append(p)
          p.start()
  
      # TODO SYNCHRONIZE HERE
  </code></pre>
  
  <p>This is an (anonymized) traceback of the errors I get when I run the code in a pool:</p>
  
  <pre><code>Process Process-5:
  Traceback (most recent call last):
    File "/usr/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap
      self.run()
    File "/usr/lib/python2.7/multiprocessing/process.py", line 114, in run
      self._target(*self._args, **self._kwargs)
    File "python_code_3.py", line 88, in function_x
      xyz = python_code_1.function_y(args)
    File "/python_code_1.py", line 254, in __init__
      self.WK =  file.WK(filename)
    File "/python_code_2.py", line 1754, in __init__
      self.__parse__(name, data, fast_load)
    File "/python_code_2.py", line 1810, in __parse__
      fd.close()
  UnboundLocalError: local variable 'fd' referenced before assignment
  </code></pre>
  
  <p>Most of the processes crash like that but not all of them. More of them seem to crash when I increase the number of processes. I also thought this might be due to memory limitations...</p>