首先,我正在使用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
的来源)