code: def runMultiprocessNoiseExperiment(resultName, repeat, numWorkers,
                                     appendResults, **kwargs):
    
    experiments = [{}]
    for key, values in kwargs.items():
      if type(values) is list:
        newExperiments = []
        for experiment in experiments:
          for val in values:
            newExperiment = copy(experiment)
            newExperiment[key] = val
            newExperiments.append(newExperiment)
        experiments = newExperiments
      else:
        [a.__setitem__(key, values) for a in experiments]
  
    newExperiments = []
    for experiment in experiments:
      for _ in xrange(repeat):
        newExperiments.append(copy(experiment))
    experiments = newExperiments
  
    return runExperiments(experiments, resultName, numWorkers, appendResults)
docs: :param kwargs: Pass lists to distribute as lists, lists that should be passed intact as tuples.
    :return: results, in the format [(arguments, results)].  Also saved to json at resultName, in the same format.