Многопроцессорность Python медленнее, чем у простых панд - PullRequest
0 голосов
/ 22 мая 2019

У меня есть файл объемом 1,4 ГБ (около 20 миллионов строк) для чтения и вычисления. Сначала я просто хочу применить фильтр к нему. Более того, я хочу использовать многопроцессорность, чтобы ускорить мой алгоритм.

Для этого я использую панды на Linux. У меня 32 ГБ памяти ...

Проблема в том, что мои алгоритмы, использующие многопроцессорную обработку Python, работают медленнее, чем обычные, и я не могу понять, почему, я думаю, что-то упустил!

  • Итерационный алгоритм:
%%time
my_data = pd.read_csv(filenames['my_file'], chunksize=chunk_size)



res = np.array([])
for chunk in my_data : 
    res = np.append(res,chunk[(chunk['field1']=='field1') |
                          (chunk['field2']=='field2')])
CPU times: user 1min 12s, sys: 2.27 s, total: 1min 14s
Wall time: 1min 14s
  • Алгоритм многопроцессорной обработки Python:
def function(df) :
    return df[(df['field1']=='field1') |
              (df['field2']=='field2')]
%%time
my_data = pd.read_csv(filenames['my_file'], chunksize=chunk_size)

pool = mp.Pool(mp.cpu_count())
funclist = []
res = np.array([])

for chunk in my_data : 
    # process each data frame
    f = pool.apply_async(function,[chunk])
    funclist.append(f)

for f in funclist:
    res = np.append(res, f.get(timeout=10)) # timeout in 10 seconds

pool.close()
pool.join()
CPU times: user 1min 51s, sys: 6.65 s, total: 1min 58s
Wall time: 1min 54s

Заранее спасибо!

...