'Create a Parallelism.
Args:
device_names_or_functions: A list of of length n, containing device names
or device functions (see `tf.device`)
reuse: True or None.  Whether to reuse variables created in the first
replica in the subsequent replicas.
caching_devices: Either `None`, or a list of length n containing device
names.
daisy_chain_variables: a boolean - if true, then copies variables in a
daisy chain between devices.
Returns:
a Parallelism.'

def __init__(self, device_names_or_functions, reuse=None, caching_devices=None, daisy_chain_variables=False):

    assert device_names_or_functions
    self._devices = device_names_or_functions
    self._n = len(device_names_or_functions)
    self._reuse = reuse
    self._caching_devices = self._MaybeRepeat(caching_devices)
    self._daisy_chain_variables = daisy_chain_variables
