Функция не работает в Python Multiprocessing Pool - PullRequest
0 голосов
/ 24 сентября 2018

Это мой код, который работает, но слишком медленно.

def fsl(Df,p):
    NewDf = Df.copy()

    if p=='group1':
        try:
            del NewDf['sl']
            del NewDf['Y2030']
        except:
            pass

    selected_clusters = NewDf.loc[(NewDf['Group']==p) & (NewDf['Selected']=='Y'),'Clusters'].tolist()

    for i in selected_clusters:
        x = 0
        surplus = calc_surplus(x,i,p)
        while (surplus > 0) and (x < 100000):
            x += 100
            surplus = calc_surplus(x,i,p)
        NewDf.loc[(NewDf['Clusters']==i) & (NewDf['Group']==p),'sl']=x

    if p=='group1':
        NewDf['sl'] = NewDf['sl'].fillna(0)

    return NewDf

Я бы хотел, чтобы surplus для каждого selected_cluster вычислялся параллельно для ускорения процесса.

Я переместил эти коды для параллельного запуска в новую функцию и попытался запустить ее на Multiprocessing.Pool следующим образом:

def parallel(i):
    x = 0
    surplus = calc_surplus(x,i,p)

    while (surplus > 0) and (x < 100000):
        x += 100
        surplus = calc_surplus(x,i,p)

    NewDf.loc[(NewDf['Clusters']==i) & (NewDf['Group']==p),'sl']=x
    if p=='group1':
        NewDf['sl'] = NewDf['sl'].fillna(0)

def fsl(Df,p):
    NewDf = Df.copy()

    if p=='group1':
        try:
            del NewDf['sl']
            del NewDf['Y2030']
        except:
            pass

    selected_clusters = NewDf.loc[(NewDf['Group']==p) & (NewDf['Selected']=='Y'),'Clusters'].tolist()

    if __name__ == '__main__':
        with Pool(4) as pool:
            pool.map(parallel,[i for i in selected_clusters])


    return NewDf

Проблема в том, что функция parallel никогда не запускаетсякогда вызывается функция fsl.Столбец sl никогда не создается.Я думаю, что ошибка в pool.map или pool.starmap, но я действительно не могу решить эту проблему.

Я видел другие темы по многопроцессорности, но большинство из них не совсем применимы к этому,Что не так с моим кодом?

...