Итак, немного предыстории о том, что я пытаюсь сделать: Ниже я написал некоторый код, который будет создавать задания по 4 и запускать их.Эти задания содержат много данных, поэтому я хочу ограничить количество запущенных одновременно.В зависимости от содержания данных эти задания могут варьироваться во времени выполнения от 2 до 15 минут.Ниже я написал код для запуска этих заданий в пакетах по 4. Это много работает.
Текущее выполнение кода
Требуемое выполнение кода
Опять же, эти задания сильно различаются по продолжительности выполнения.Таким образом, создается впечатление, что выполнение заданий в пакетах по 4 (или n) может привести к потере времени.Например, если задано 4 задания, если 3 занимают 2 минуты, а другое - 10, то будет 8 минут только одного запущенного процесса.
Итак, мой вопрос: есть ли способ предоставить список заданий для некоторой функции / класса / чего угодно, чтобы я мог поддерживать постоянным число процессов и заданий?
manager = multiprocessing.Manager()
return_dict = manager.dict()
jobs = []
numOFProc = 4
for api in WellAPIs: #iterate over individual wells in a file
p = multiprocessing.Process(target=self.processWell, args=(df,CreatingPrediction,cache,df, newColList, clustringPredictionColName,return_dict,lock))
jobs.append(p)
p.start()
numOfActiveProc = len(jobs)
if numOFProc <= numOfActiveProc:
for proc in jobs:
proc.join()
jobs = []
print "jobs: " + str(jobs)
for proc in jobs:
proc.join()
jobs = []
for parDF in return_dict.values():
outDf = outDf.append(parDF)