控制Python中嵌套的并行进程的数量

时间:2018-11-08 17:40:07

标签: python python-2.7 parallel-processing

首先,我正在使用python 2.7,我知道使用Python 3.3可以有更好的方法,但是由于某些限制,这不是一个选择。

我正在使用multiprocessing模块来并行化涉及文件I / O的任务。任务需要运行数天,站点和会话。每天都有任务,每个站点每天都有一个任务,并且每个站点根据会话的不同,都会有许多任务。因此,我制定了一个嵌套并行进程的方案:

# Main program, calls task per day

# Do stuff

arguments = [(date, config) for date in dateInterval]
pool = MyPool(processes=1) # MyPool instead of Pool to allow nested multiprocessing
manager = mp.Manager()
lock = manager.Lock()
func = partial(parallelPPP, lock)
pool.map(func, arguments)
pool.close()
pool.join()

# Task per day, calls task per station
def parallelPPP(lock, (date, config)):

    # Do stuff

    arguments = [(station.lower(), config) for station in config["stations"]]
    pool = MyPool()
    func = partial(station_job, lock)
    pool.map(func, arguments)
    pool.close()
    pool.join()

# Task per day, calls task per station
def station_job(lock, (station, config)):

    # Do stuff

    arguments = [(offset, config) for offset in missingOffsets]
    pool = mp.Pool()
    func = partial(offset_job, lock)
    pool.map(func, arguments)
    pool.close()
    pool.join()


# Task per session, final
def offset_job(lock, (offset, config)):

    # Do stuff

设置pool = MyPool(processes=1)时,我只是在控制有效parallelPPP作业的数量。我要控制的是作业的最终数量,即offset_job个调用的数量。有本机控制此方法吗?还是我应该自己修改模块?为了能够创建此嵌套方案,我必须首先对其进行修改,例如在https://stackoverflow.com/a/8963618/7139191中(这就是MyPool的来源)

0 个答案:

没有答案