Многопроцессорная обработка с использованием нескольких аргументов в Python - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть функция, которая содержит несколько аргументов.Аргументы - это разные фреймы данных.

  def MongoInsertion(prop,SimMat_subset,Res_contents,resources,standards):
    client = MongoClient(port=27017)
    db=client.knovation

    std2_F = SimMat_subset.loc[0]
    print(std2_F)
    Std_index = SimMat_subset.iloc[0].name
    Standard_list = standards.iloc[Std_index]['Standard Grades']    
    Standard_list = list(Standard_list.split(" "))
    Standard_list = Standard_list[0].split(",")
    Filtered_Resource=Res_contents[Res_contents['Grades'].str.split(',',expand=True).isin(Standard_list).any(1)]

    Filter_score = std2_F[std2_F.index.isin(Filtered_Resource.index)]
    Filter_score_list = Filter_score.tolist()

    result_filtered = {}
    result_filtered["GUID"]=str(standards.iloc[Std_index]['GUID'])                

    Evaluation = {}

    for k in range(0,len(Filtered_Resource)):
        Evaluation[str(Filtered_Resource.iloc[k]['Evaluation Code'])] = Filter_score_list[k]
    sorted_Evaluation = dict( sorted(Evaluation.items(), key=operator.itemgetter(1),reverse=True))
    sorted_Evaluation = dict(itertools.islice(sorted_Evaluation.items(), 10))

    result_filtered.update(sorted_Evaluation)
    print(result_filtered)
    result1 = db.ParallelPro_Maths.insert_one(result_filtered)

Вывод будет вставлен в MongoDB.

Я хочу, чтобы эта функция применялась к фрейму данных с использованием многопроцессорной обработки python.

Нижеэто метод, который я попробовал:

from multiprocessing import Pool
num_partitions = 3
num_cores = 4

def parallelize_dataframe(df,func):
    df_split = np.array_split(df, num_partitions)    
    pool = Pool(num_cores)
    pool.starmap(func, df_split)
    pool.close()

И я применяю многопроцессорность:

parallelize_dataframe(SimMat_subset,MongoInsertion)

Вышеупомянутый метод, похоже, не работает.Как сделать распараллеливание с несколькими аргументами?

...