У меня есть кадр данных панд около 100M строк. Параллельная обработка работает очень хорошо на многоядерной машине со 100% использованием каждого ядра. Однако результаты executor.map()
являются генератором, поэтому для фактического сбора обработанных результатов я перебираю этот генератор. Это очень, очень медленно (часы), частично потому что это одно ядро, частично из-за цикла. На самом деле, это намного медленнее, чем фактическая обработка в my_function()
Есть ли лучший способ (возможно, одновременный и / или векторизованный)?
РЕДАКТИРОВАТЬ: Использование панд 0.23.4 (последний на данный момент) с Python 3.7.0
import concurrent
import pandas as pd
df = pd.DataFrame({'col1': [], 'col2': [], 'col3': []})
with concurrent.futures.ProcessPoolExecutor() as executor:
gen = executor.map(my_function, list_of_values, chunksize=1000)
# the following is single-threaded and also very slow
for x in gen:
df = pd.concat([df, x]) # anything better than doing this?
return df