Из-за большого фрейма данных (100 тыс. Строк) я попытался использовать многопроцессорный подход, чтобы ускорить мои вычисления. Тем не менее, этот код продолжает работать в моем ноутбуке Python навсегда, и я не мог завершить вообще. Загрузка моего процессора (8 процессоров) составляет всего 5%.
def func(df):
df_result = df.apply(lambda row: fill_simulated_data(row, df1_before_last_30days), axis = 1)
return df_result
def parallelize_dataframe(df, func):
num_cores = multiprocessing.cpu_count()-1 #leave one free to not freeze machine
num_partitions = num_cores #number of partitions to split dataframe
df_split = np.array_split(df, 2)
pool = multiprocessing.Pool(num_cores)
df = pd.concat(pool.map(func, df_split))
pool.close()
pool.join()
return df
start = timeit.default_timer()
df1_last_30days_test = df1_last_30days.iloc[0:1000]
result = parallelize_dataframe(df1_last_30days_test,func)
stop = timeit.default_timer()
print 'Process was done in: ' + str(stop - start) + ' seconds'
Без многопроцессорной обработки моя функция занимает около 5,9 с для небольшого кадра данных (100 строк). Что я тут не так делаю?