Multiprocesamiento / subprocesamiento múltiple con 2 marcos de datos en Python

A menudo, las diferentes pruebas de hipótesis requieren la repetición de la ingeniería y la disputa de datos que involucran 2 o más marcos de datos separados. Por lo general, se recomienda incorporar un procesamiento paralelo para la manipulación / ingeniería de datos desde el principio. Esto nos ahorrará toneladas de tiempo de espera repetitivo y nos permitirá proceder rápidamente a análisis descriptivos / correlativos / predictivos posteriores.

H ere, asumiendo que estamos trabajando en datos estructurados usando pandas DataFrame. Usaremos el paquete multiprocessing en Python para realizar los trabajos de procesamiento paralelo.

2. A continuación, preparamos fragmentos de datos divididos para multiprocesamiento / multiproceso.

3. A continuación, definimos una función para calcular la distancia euclidiana entre puntos de los 2 marcos de datos.

4. A continuación, asignamos en estrella los trabajos divididos al Grupo de 3 procesos de la CPU para que la distancia euclidiana se pueda calcular simultáneamente para los 3 conjuntos de marcos de datos coincidentes. Aquí usamos la función zip() para enumerar los marcos de datos como el orden de la lista. También noté que algunas veces tenemos que usar multiprocessing.pool.ThreadPool(), es decir, multihilo, en lugar de multiprocessing.Pool () , es decir, multiprocesamiento, para tener las cargas de CPU completas esperadas y un procesamiento realmente rápido.

5. Por último, verifiqué el uso de la CPU usando la función top en la Terminal. De hecho, se ejecutaban en paralelo con casi 3 CPU completamente cargadas.

Opcional 1: por separado, en caso de que esté interesado en calcular la distancia de los sujetos en todos los fragmentos df_source de los sujetos en solo uno de los fragmentos df_target, puede utilizar intertools.repeat () junto con la función zip () . Aquí, repetimos el primer fragmento de df_target 3 veces al comprimir con los diferentes fragmentos de df_source.

Opcional 2: Por último, hay códigos adicionales que me resultan útiles durante mi trabajo de rutina. Por ejemplo, si queremos dividir df_source de acuerdo con la cantidad de trabajos que queramos e independientemente de la agrupación de etiquetas, podemos usar los siguientes códigos. Primero, tenemos que restablecer el índice de df_source.

Si los tutoriales anteriores le resultan útiles, es posible que desee considerar la posibilidad de marcar esta página en su navegador para su futura referencia. En caso de que necesite ayuda, puede dejar un comentario a continuación;)