Распараллелить функцию с фреймом данных в качестве входа - PullRequest
0 голосов
/ 12 декабря 2018

Как я могу распараллелить func1 в приведенном ниже коде.Он принимает фрейм данных в качестве входных данных. func1 - это прототип функции, которую я пытаюсь распараллелить.В реальной функции есть много кадров данных и рядов в качестве входных данных в функции.

import pandas as pd

def func1(d,a):
    product = d.prod(axis=1)*a
    print(product)

#input 1
a1=2    
input1 = pd.DataFrame({'F':[2,3,4,5,1,2], 'E':[12,4,5,6,7,2], 'N':[2,7,6,5,4,3]}) 

#input 2
a2 = 0
input2 = pd.DataFrame({'F':[0,32,4,12,1,2], 'E':[1,4,5,0,7,2], 'N':[21,7,61,5,4,3]})

#input3
a3=100
input3 = pd.DataFrame({'F':[0,1,1,1,1,1], 'E':[1,12,5,110,7,2], 'N':[3,7,61,5,1,1]})

#call function
func1(input1,a1)
func1(input2,a2)
func1(input3,a3)

1 Ответ

0 голосов
/ 13 декабря 2018

Просто используйте встроенную библиотеку многопроцессорной обработки.Я отредактировал ваш код для работы на нескольких ядрах одновременно.

import pandas as pd
from multiprocessing import Pool, cpu_count

CORE_NUMBER = cpu_count()

def func1(d, a):
    product = d.prod(axis=1)*a
    print(product)

# input 1
a1=2    
input1 = pd.DataFrame({'F':[2,3,4,5,1,2], 'E':[12,4,5,6,7,2], 'N':[2,7,6,5,4,3]}) 

# input 2
a2 = 0
input2 = pd.DataFrame({'F':[0,32,4,12,1,2], 'E':[1,4,5,0,7,2], 'N':[21,7,61,5,4,3]})

# input 3
a3=100
input3 = pd.DataFrame({'F':[0,1,1,1,1,1], 'E':[1,12,5,110,7,2], 'N':[3,7,61,5,1,1]})

data = [(input1,a1),(input2,a2),(input3,a3)]
pool = Pool(CORE_NUMBER) 

# call function
pool.starmap(func1, data)
pool.close()
pool.join()
...