“Conocimiento Programación>Python Programming

¿Cómo se puede implementar el procesamiento paralelo en Python usando un bucle for?

2013/9/25
No puede paralelizar directamente un bucle `for` estándar en Python usando solo la construcción de bucle 'for` incorporada. La cerradura del intérprete global de Python (GIL) evita que múltiples hilos ejecuten bytes de Python simultáneamente dentro de un solo proceso. Esto significa que el verdadero paralelismo para las tareas unidas a la CPU dentro de un `` bucle para 'es imposible con solo roscarse.

Sin embargo, puede lograr el paralelismo utilizando el multiprocesamiento, lo que evita el GIL creando múltiples procesos. Así es como puede implementar el procesamiento paralelo en Python utilizando un `for` bucle y la biblioteca de 'multiprocesamiento':

Método 1:Uso de `multiprocesamiento.pool.map` (más simple para muchas operaciones idénticas)

Este es el enfoque más fácil si cada iteración de su bucle realiza la misma operación en diferentes datos. `Pool.Map` distribuye eficientemente el trabajo en múltiples procesos.

`` `Python

importar multiprocesamiento

Def process_item (elemento):

"" "La función se ejecutará en paralelo para cada elemento". ""

# Su código para procesar un solo elemento va aquí

# ... un poco de cálculo ...

Resultado de retorno # devuelve el resultado del cálculo

Si __name__ =='__main__':# importante para la compatibilidad de Windows

datos =[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # sus datos

con multiprocesamiento.pool (procesos =multiprocessing.cpu_count ()) como grupo:

Resultados =Pool.map (Process_item, Data)

Imprimir (resultados)

`` `` ``

Este código crea un grupo de procesos de trabajadores (igual al número de núcleos de CPU de forma predeterminada). `Pool.map` aplica` process_item` a cada elemento en `data` simultáneamente, y devuelve una lista de los resultados en el mismo orden que la entrada.

Método 2:usando `multiprocesamiento.pool.apply_async` (para escenarios más complejos o operaciones asíncronas)

Si su bucle implica operaciones lógicas o asincrónicas más complejas, `Aplice_async` ofrece más control.

`` `Python

importar multiprocesamiento

Def process_item (elemento):

# ... tu código ...

Resultado de retorno

Si __name__ =='__main__':

Datos =[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Resultados =[]

con multiprocesamiento.pool (procesos =multiprocessing.cpu_count ()) como grupo:

# APLICE_ASYNC Devuelve un objeto AsyncreSult

async_results =[Pool.apply_async (process_item, (item,)) para el elemento en los datos]

# Obtenga los resultados (bloqueando hasta que se completen todos los procesos)

para async_result en async_results:

Results.append (async_result.get ())

Imprimir (resultados)

`` `` ``

`APLICE_ASYNC` le permite enviar tareas individualmente y recuperar los resultados más tarde. Esto es útil si el tiempo de procesamiento para cada elemento varía significativamente.

Consideraciones importantes:

* `if __name__ =='__main __':`: Esto es crucial, especialmente en las ventanas, para evitar la creación de procesos recursivos.

* Compartir datos: Evite compartir datos mutables directamente entre procesos. Use técnicas como colas o tuberías para la comunicación entre procesos para prevenir las condiciones de carrera.

* Overhead: La creación y la gestión de procesos tiene una sobrecarga. El procesamiento paralelo es más beneficioso para las tareas computacionalmente intensivas en las que el tiempo de procesamiento supera significativamente la sobrecarga.

* Número de procesos: El número óptimo de procesos a menudo es igual al número de núcleos de CPU, pero podría ser necesaria la experimentación.

Recuerde reemplazar `# ... su código ...` Con su cálculo real. Elija el método que mejor se adapte a la estructura y la complejidad de sus operaciones de 'For` Loop. Para operaciones simples y amigables con el paralelo, `piscina.map` suele ser el enfoque preferido y más eficiente.

Python Programming
Funciones con Arrays & Alcance en Numerical Python
Cómo ejecutar código Python
Cómo determinar el orden alfabético en Python
Cómo agregar una introducción de carácter en Python
Cómo realizar la prueba en una lista en Python
Cómo codificar UTF - 8 en Omitir en Python
Cómo comprobar el Diccionario exacto en Python
Cómo calcular la interpolación numérica Usando Python
Conocimiento de la computadora © http://www.ordenador.online