code: def compute_responsibilities(hdf5_file, N_columns, damping, N_processes):
      
  
      slice_queue = multiprocessing.JoinableQueue()
      
      pid_list = []
      for i in range(N_processes):
          worker = Responsibilities_worker(hdf5_file, '/aff_prop_group',
                     N_columns, damping, slice_queue)
          worker.daemon = True
          worker.start()
          pid_list.append(worker.pid)
          
      for rows_slice in chunk_generator(N_columns, 8 * N_processes):
          slice_queue.put(rows_slice)
          
      slice_queue.join()
      slice_queue.close()
      
      terminate_processes(pid_list)
docs: Organize the computation and update of the responsibility matrix
          for Affinity Propagation clustering with 'damping' as the eponymous 
          damping parameter. Each of the processes concurrently involved in this task 
          is an instance of the class 'Responsibilities_worker' defined above.