Пример #1
0
class ParallelExecutor(TaskExecutor):
    """
    ====================
    ParallelExecutor
    ====================
    :class:`ParallelExecutor` splits the data for multiprocessing
    """

    def __init__(self, nbParal=-1, logger=None, verbosity=0, tempFolder=None):
        TaskExecutor.__init__(self, logger, verbosity)
        self._nbParal = nbParal
        self._tmpFolder = tempFolder
        self._numpyFactory = NumpyFactory(tempFolder)

    def execute(self, desc, function, data, *args, **kwargs):
        #Splitting task
        tSplitter = TaskSplitter()
        nbJobs, splittedData, starts = tSplitter.partition(self._nbParal, data)

        #Logging
        self.setTask(1, ("Starting parallelization : "+desc))

        #Parallelization
        parallelizer = Parallel(n_jobs=nbJobs, temp_folder=self._tmpFolder,
                                verbose=self.verbosity,)

        if len(args) == 0:
            if len(kwargs) == 0:
                allData = parallelizer(delayed(function)(
                    splittedData[i]) for i in xrange(nbJobs))
            else:
                allData = parallelizer(delayed(function)(
                    splittedData[i], **kwargs) for i in xrange(nbJobs))
        elif len(kwargs) == 0:
            allData = parallelizer(delayed(function)(
                splittedData[i], *args) for i in xrange(nbJobs))
        else:
            allData = parallelizer(delayed(function)(
                splittedData[i], *args, **kwargs) for i in xrange(nbJobs))
        self.endTask()

        return allData

    def executeWithStart(self, desc, function, data, *args, **kwargs):
        #Splitting task
        tSplitter = TaskSplitter()
        nbJobs, splittedData, starts = tSplitter.partition(self._nbParal, data)

        #Logging
        self.setTask(1, ("Starting parallelization : "+desc))

        #Parallelization
        parallelizer = Parallel(n_jobs=nbJobs, temp_folder=self._tmpFolder,
                                verbose=self.verbosity,)

        if len(args) == 0:
            if len(kwargs) == 0:
                allData = parallelizer(delayed(function)(
                    splittedData[i], startIndex=starts[i])
                    for i in xrange(nbJobs))
            else:
                allData = parallelizer(delayed(function)(
                    splittedData[i], startIndex=starts[i], **kwargs)
                    for i in xrange(nbJobs))

        elif len(kwargs) == 0:
            allData = parallelizer(delayed(function)(
                splittedData[i], startIndex=starts[i], *args)
                for i in xrange(nbJobs))

        else:
            allData = parallelizer(delayed(function)(
                splittedData[i], startIndex=starts[i], *args, **kwargs)
                for i in xrange(nbJobs))

        self.endTask()

        return allData

    def createArray(self, shape, dtype=float):
        return self._numpyFactory.createArray(shape, dtype)

    def clean(self, array):
        self._numpyFactory.clean(array)
Пример #2
0
class ParallelExecutor(TaskExecutor):
    """
    ====================
    ParallelExecutor
    ====================
    :class:`ParallelExecutor` splits the data for multiprocessing
    """
    def __init__(self, nbParal=-1, logger=None, verbosity=0, tempFolder=None):
        TaskExecutor.__init__(self, logger, verbosity)
        self._nbParal = nbParal
        self._tmpFolder = tempFolder
        self._numpyFactory = NumpyFactory(tempFolder)

    def execute(self, desc, function, data, *args, **kwargs):
        #Splitting task
        tSplitter = TaskSplitter()
        nbJobs, splittedData, starts = tSplitter.partition(self._nbParal, data)

        #Logging
        self.setTask(1, ("Starting parallelization : " + desc))

        #Parallelization
        parallelizer = Parallel(
            n_jobs=nbJobs,
            temp_folder=self._tmpFolder,
            verbose=self.verbosity,
        )

        if len(args) == 0:
            if len(kwargs) == 0:
                allData = parallelizer(
                    delayed(function)(splittedData[i]) for i in xrange(nbJobs))
            else:
                allData = parallelizer(
                    delayed(function)(splittedData[i], **kwargs)
                    for i in xrange(nbJobs))
        elif len(kwargs) == 0:
            allData = parallelizer(
                delayed(function)(splittedData[i], *args)
                for i in xrange(nbJobs))
        else:
            allData = parallelizer(
                delayed(function)(splittedData[i], *args, **kwargs)
                for i in xrange(nbJobs))
        self.endTask()

        return allData

    def executeWithStart(self, desc, function, data, *args, **kwargs):
        #Splitting task
        tSplitter = TaskSplitter()
        nbJobs, splittedData, starts = tSplitter.partition(self._nbParal, data)

        #Logging
        self.setTask(1, ("Starting parallelization : " + desc))

        #Parallelization
        parallelizer = Parallel(
            n_jobs=nbJobs,
            temp_folder=self._tmpFolder,
            verbose=self.verbosity,
        )

        if len(args) == 0:
            if len(kwargs) == 0:
                allData = parallelizer(
                    delayed(function)(splittedData[i], startIndex=starts[i])
                    for i in xrange(nbJobs))
            else:
                allData = parallelizer(
                    delayed(function)(
                        splittedData[i], startIndex=starts[i], **kwargs)
                    for i in xrange(nbJobs))

        elif len(kwargs) == 0:
            allData = parallelizer(
                delayed(function)(splittedData[i], startIndex=starts[i], *args)
                for i in xrange(nbJobs))

        else:
            allData = parallelizer(
                delayed(function)(
                    splittedData[i], startIndex=starts[i], *args, **kwargs)
                for i in xrange(nbJobs))

        self.endTask()

        return allData

    def createArray(self, shape, dtype=float):
        return self._numpyFactory.createArray(shape, dtype)

    def clean(self, array):
        self._numpyFactory.clean(array)