У меня есть CSV-файл с 100 тысячами строк. Колонки = ['NAME', 'X', 'Y', 'angle1', 'angle2' ...... 'angle360']
NAME X Y angle1 angle2 ... angel360
0 a 13 1 1 5 ... 2
1 b 12 7 4 5 ... 3
2 c 23 2 1 6 ... 1
3 d 32 6 1 2 ... 7
4 e 31 6 2 3 ... 4
5 f 24 3 3 2 ... 1
6 g 14 1 5 3 ... 2
7 h 14 2 8 3 ... 7
8 i 75 4 2 7 ... 5
...
Мне нужно рассчитать каждый угол по правилу: (X-angle[i])/Y
и сохранить результат в новый столбец с именем result [i]
import pandas as pd
from multiprocessing import Pool,cpu_count
import numpy as np
def parallelize_dataframe(df, func):
df_split = np.array_split(df, num_partitions)
pool = Pool(num_cores)
df = pd.concat(pool.map(func, df_split))
pool.close()
pool.join()
return df
def calculate(df,i):
df['result'+str(i)] = (df['X']-df['angle'+str(i)])/df['Y']
return df
def result(df):
for i in range(360):
df = calculate(df,i)
return df
if __name__ == '__main__':
num_cores = cpu_count() - 2 # number of cores on your machine
num_partitions = 10 * num_cores # number of partitions to split dataframe
df = pd.read_csv("C:\user\tmp\file.csv")
parallelize_dataframe(df,result)
Результат был правильным, а производительность повысилась, но этого оказалось недостаточно.Это заняло почти 12 минут с многопроцессорной обработкой и 20 минут без многопроцессорной обработки. Есть предложения по улучшению производительности?Другая проблема заключается в том, что многопроцессорная обработка небольших файлов (около 7 тысяч строк) выполняется медленнее, чем однократная. Я не знаю, почему это произойдет.