Использование многопроцессорной обработки с несколькими аргументами на пандах - PullRequest
0 голосов
/ 31 октября 2019

Я пытаюсь ознакомиться с многопроцессорностью, поэтому я разработал какое-то упражнение, которое я мог бы расширить в реальной жизни.

Цель здесь состоит в том, чтобы выделить простой расчет (подсчитывающий число нуль). значения столбца) с учетом списка всех (или части) столбцов данных.

У меня есть следующий код, который выполняется, но он не использует многопроцессорность ... действительно, кажетсявсе происходит линейно.

from multiprocessing import Pool
import multiprocessing as mp
from itertools import repeat
import pandas as pd
from functools import partial
from concurrent.futures import ProcessPoolExecutor
import time

def imp():
    file = r'TDB_LCR_TITRES_201908.csv'
    df = pd.read_csv(file, sep=';', encoding='latin_1')
    print('import done')
    return df

def PRES(df, col):

    print(f'Start {col}')
    print(f'len {col} : {len(df[df[col].isnull()])}')
    print(f'End {col}')

    return len(df[df[col].isnull()])

def main(df):
    lst_res = []
    cols = list(df.columns)
    print(cols)
    func = partial(PRES,df)
    e = ProcessPoolExecutor()
    results = e.map(func, cols)
    lst_res.append(results)

    print(f'lst_res : {lst_res}')
    return lst_res

if __name__ == '__main__':

    df = imp()
    start = time.perf_counter()
    main(df)
    finish = time.perf_counter()
    print(f'Finished in {round(finish - start,2)} seconds')

Другое дело, что он не добавляет значения ни в lst_result. Будучи новичком в многопроцессорности, я не совсем понимаю, в чем дело.

...