'Spawn processes from a list of process protocols.
@param spawner: A C{IReactorProcess.spawnProcess} implementation.
@param protocols: An iterable of C{ProcessProtocol} instances.
@param arguments: Extra arguments passed to the processes.'

def launchWorkerProcesses(self, spawner, protocols, arguments):

    workertrialPath = theSystemPath['twisted.trial._dist.workertrial'].filePath.path
    childFDs = {0: 'w', 1: 'r', 2: 'r', _WORKER_AMP_STDIN: 'w', _WORKER_AMP_STDOUT: 'r'}
    environ = os.environ.copy()
    environ['TRIAL_PYTHONPATH'] = os.pathsep.join(sys.path)
    for worker in protocols:
        args = [sys.executable, workertrialPath]
        args.extend(arguments)
        spawner(worker, sys.executable, args=args, childFDs=childFDs, env=environ)
