Velocidad lenta mientras se paraliza la operación en el dataframe de pandas

Tengo un dataframe en el que realizo algunas operaciones e imprimo. Para hacer esto, tengo que recorrer cada fila.

for count, row in final_df.iterrows(): x = row['param_a'] y = row['param_b'] # Perform operation # Write to output file 

Decidí paralelizar esto usando el módulo de multiprocesamiento python

 def write_site_files(row): x = row['param_a'] y = row['param_b'] # Perform operation # Write to output file pkg_num = 0 total_runs = final_df.shape[0] # Total number of rows in final_df threads = [] import multiprocessing while pkg_num < total_runs or len(threads): if(len(threads) < num_proc and pkg_num < total_runs): print pkg_num, total_runs t = multiprocessing.Process(target=write_site_files,args=[final_df.iloc[pkg_num],pkg_num]) pkg_num = pkg_num + 1 t.start() threads.append(t) else: for thread in threads: if not thread.is_alive(): threads.remove(thread) 

Sin embargo, el último método (paralelizado) es mucho más lento que el enfoque basado en iteraciones simples. ¿Hay algo que me esté perdiendo?

¡Gracias!

Esto será mucho menos eficiente que hacer esto en un solo proceso a menos que la operación real tome mucho tiempo, como segundos por fila .

Normalmente la paralelización es la última herramienta en el cuadro. Después del perfilado, después de la vectorización local, después de la optimización local, entonces se paraliza.

Está gastando tiempo simplemente haciendo el corte, luego girando nuevos procesos (que generalmente es una sobrecarga constante), y luego decapando una sola fila (no está claro qué tan grande es su ejemplo).

Como mínimo, debe dividir las filas, por ejemplo, df.iloc[i:(i+1)*chunksize] .

Es de esperar que haya algún soporte para la apply paralela en 0.14, consulte aquí: https://github.com/pydata/pandas/issues/5751