Как вставить фиксированные аргументы в multiprocess.Pool.map () в python 3? - PullRequest
0 голосов
/ 27 февраля 2020

Я пытаюсь оптимизировать некоторые из моих подпрограмм, распараллеливая их, но я нахожу некоторые проблемы с использованием глобальной переменной (pandas DataFrame's) и библиотек (NumPy и pandas).

Чтобы решить, что я пытаюсь это

def main():
    data.to_pickle('teste01')
    work_days.to_pickle('teste02')
    import multiprocess as mp

    global data
    global work_days

    def initializer():
        global data
        global work_days
        import pandas as pd
        import numpy as np
        data = pd.read_pickle('teste01')
        work_days = pd.read_pickle('teste02')

    pool = mp.Pool(6, initializer, ())

    def sum_cal(str):
        import numpy as np
        import pandas as pd
        i,j,k,l,m = str[0],str[1],str[2],str[3],str[4]
        #data=pd.read_pickle('teste01')
        #work_days=pd.read_pickle('teste02')
        print(data.iloc[0])


        try:
            a = [i,j,k,l,m,'Fechado',work_days.loc[idx[i,m]].values[0]-(data.loc[idx[i,j,k,l,m,'Disponivel'],'count']+data.loc[idx[i,j,k,l,m,'Baixa'],'count'])]

            #data.loc[idx[i,j,k,l,'Fechado'],'count']=i.day-(data.loc[idx[i,j,k,l,'Disponivel'],'count']+data.loc[idx[i,j,k,l,'Baixa'],'count'])
            f=data.loc[idx[i,j,k,l,m,'Disponivel'],'count']+data.loc[idx[i,j,k,l,m,'Baixa'],'count']
            #CALCULANDO VALORES PROVENIENTES
            #PART DO DISPONIVEL
            data.loc[idx[i,j,k,l,m,'Disponivel'],'valor']=TM.loc[idx[i,j,k,l,m],'sum(VLR_BRUTO01)']*data.loc[idx[i,j,k,l,m,'Disponivel'],'count']/f
            #PART DA BAIXA
            data.loc[idx[i,j,k,l,m,'Baixa'],'valor']=TM.loc[idx[i,j,k,l,m],'sum(VLR_BRUTO01)']*data.loc[idx[i,j,k,l,m,'Baixa'],'count']/f
            #PART ESTIMADA QUE ESTAMOS PERDENDO BASEADA NO TM PARA O TEMPO QUE FICAMOS FECHADO
            #data.loc[idx[i,j,k,l,'Fechado'],'valor']=TM.loc[idx[i,j,k,l],'TraM']*TM.loc[idx[i,j,k,l],'TM']*data.loc[idx[i,j,k,l,'Fechado'],'count']
            a.append(TM.loc[idx[i,j,k,l,m],'TraM']*TM.loc[idx[i,j,k,l,m],'TM']*data.loc[idx[i,j,k,l,m,'Fechado'],'count'])
            print('foi')
        except:
            a = [i,j,k,l,m,'Fechado',np.nan,np.nan]
        return a


    vamos=pool.map(sum_cal,d)

, и вывод будет

Process SpawnPoolWorker-66:
Traceback (most recent call last):
  File "C:\Users\iago.dalsenter\AppData\Local\Continuum\anaconda3\lib\site-packages\multiprocess\process.py", line 297, in _bootstrap
    self.run()
  File "C:\Users\iago.dalsenter\AppData\Local\Continuum\anaconda3\lib\site-packages\multiprocess\process.py", line 99, in run
    self._target(*self._args, **self._kwargs)
  File "C:\Users\iago.dalsenter\AppData\Local\Continuum\anaconda3\lib\site-packages\multiprocess\pool.py", line 105, in worker
    initializer(*initargs)
  File "<ipython-input-3-6ef94895caa3>", line 17, in initializer
NameError: name 'pd' is not defined

Если у кого-то было представление о том, как решить эту проблему, я буду рад узнать о

Большое спасибо до сих пор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...