У меня есть несколько сотен входных файлов, которые мне нужно передать функции для вычисления некоторых чисел и записать их в выходной файл. Функция не возвращает никакого значения. Таким образом, каждый вызов функции является независимым.Многопоточная/параллельная обработка
Вместо вызова функции последовательно, я пробовал многопроцессорную обработку, а производительность (время выполнения) не намного лучше. Любые предложения по повышению эффективности ценны. Даже многопроцессорный путь для решения этой проблемы?
import multiprocessing as mp
NumProcess = 4
def Analysis(InputFile):
#do some calcs
#Write results to output file
#return nothing
FileList = ['InputFile1.csv','InputFile2.csv','InputFile3.csv',....]
pool = mp.Pool(processes=NumProcess)
temp = [pool.apply_async(Analysis, args=(File) for File in FileList]
output = [p.get() for p in temp]
pool.close()
да - многопроцессорный является правильным, простым подходом там. Возможно, ваше узкое место где-то в другом месте. Если у вас есть как минимум два ядра процессора, это должно быть лучше. – jsbueno
В этом листинге слишком много записей о начале записи, хотя – jsbueno
Связан ли ваш алгоритм с привязкой к процессору или привязкой ввода/вывода? Если он связан с I/O, то создание нескольких потоков/процессов не ускорит его работу и может сделать его медленнее, если он заставит головы вашего жесткого диска искать назад и вперед намного больше, чем в одиночном режиме, thread/single-process case. –