У меня есть файл объемом 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
Заранее спасибо!