многопроцессорная обработка для нескольких столбцов с одинаковыми функциями - PullRequest
0 голосов
/ 11 октября 2018

У меня есть 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 тысяч строк) выполняется медленнее, чем однократная. Я не знаю, почему это произойдет.

...