Я пытаюсь оптимизировать некоторые из моих подпрограмм, распараллеливая их, но я нахожу некоторые проблемы с использованием глобальной переменной (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
Если у кого-то было представление о том, как решить эту проблему, я буду рад узнать о
Большое спасибо до сих пор.