Python multiprocesamiento de múltiples procesos por hilo

dter

Actualmente estoy usando el módulo de multiprocesamiento de Python con un grupo para ejecutar una función millones de veces, simultáneamente. Si bien el multiprocesamiento funciona bien, la función es tan liviana que apenas se usa el 30% de cada núcleo y los subprocesos se maximizan solo durante el bloqueo (). Mirando el perfil de mi script, de hecho, bloquear es el más caro.

Dado que la ejecución de cada función es muy corta, la compensación entre bloquear cada vez que mapeo la función y ejecutar la función no vale la pena (de hecho, obtengo un mejor rendimiento ejecutándola en serie; 15 minutos en paralelo frente a 4.5 minutos de serie).

La función escribe en archivos independientes, por lo que las llamadas son completamente independientes. ¿Es posible 'imitar' ejecutar / llamar al mismo script de Python paralelizado varias veces (con diferentes entradas) para hacer más uso de la CPU?

Código actual:

pool = Pool(cpu_count(), initializer=tqdm.tqdm.set_lock, initargs=(Lock(),))

for _ in tqdm.tqdm(pool.imap_unordered(parallel_process, pubfiles, chunksize=70), total=nfiles, desc='Parsing files'):
  pass

EDITAR:

Para asegurarse de que no tenga nada que ver con el bloqueo de tqdm, modificar el código a lo siguiente logra el mismo problema:

    pool = Pool(cpu_count())
    for i in pool.imap_unordered(parallel_process, files, chunksize=70):
        print(i)

ingrese la descripción de la imagen aquí

He perfilado mi código durante un tiempo y los procesos más costosos parecen estar relacionados con el bloqueo (?) / Multiprocesamiento en general. La función real está muy cerca del final del tiempo de procesamiento.ingrese la descripción de la imagen aquí

dter

Este problema no tenía nada que ver con el multiprocesamiento: mis funciones estaban vinculadas a IO porque cada llamada estaba leyendo y escribiendo un archivo en el disco y esto era un cuello de botella cuando se ejecutaba en paralelo. La fragmentación y la reducción del número de archivos escritos redujeron este cuello de botella y el código de multiprocesamiento anterior (paralelismo) funcionó perfectamente bien.

Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.

En caso de infracción, por favor [email protected] Eliminar

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

Multiprocesamiento de Python: ¿por qué mis procesos no regresan / finalizan?

Multiprocesamiento de Python: ¿por qué mis procesos no regresan / finalizan?

Multiprocesamiento de Python: los procesos no se inician

Multiprocesamiento de Python: termina los procesos por argumentos después de exceder el tiempo de espera

Multiprocesamiento de Python: ¿la cantidad de procesos en un grupo disminuye por error?

Multiprocesamiento de Python: ¿la cantidad de procesos en un grupo disminuye por error?

¿Cómo matar procesos zombies creados por el módulo de multiprocesamiento?

Módulo de multiprocesamiento de Python: unirse a procesos con tiempo de espera

No se puede interbloquear entre procesos mientras se usa el módulo de multiprocesamiento en Python

Nombre duplicado de los procesos de multiprocesamiento de Python

Poner en cola un tf.RandomShuffleQueue de múltiples procesos usando multiprocesamiento

Poner en cola un tf.RandomShuffleQueue de múltiples procesos usando multiprocesamiento

Poner en cola un tf.RandomShuffleQueue de múltiples procesos usando multiprocesamiento

¿Cuál es el método más seguro para guardar archivos generados por diferentes procesos con multiprocesamiento en Python?

Multiprocesamiento de Python: trabajo simple dividido en muchos procesos

El multiprocesamiento de Python conduce a muchos procesos zombies

Administrador de procesos simple usando multiprocesamiento en Python

El multiprocesamiento de Python es más lento que el de un solo hilo

Multiprocesamiento de Python: captura de señales para reiniciar procesos secundarios o cerrar procesos primarios

¿Es posible crear procesos secundarios / de trabajo multiprocesamiento de Python que no importan el módulo __main__?

grupo de multiprocesamiento de Python que bloquea el hilo principal

Multiprocesamiento en Python más lento que un solo hilo

Python: cerrar el hilo de multiprocesamiento detiene todo el programa

Multiprocesamiento de Python con diferente constante para cada hilo

Multiprocesamiento en Python: manejar múltiples subprocesos de trabajo

Pool.map multiprocesamiento de Python para múltiples argumentos

para multiprocesamiento de bucles o subprocesos múltiples en Python

Multiprocesamiento de Python con matrices y múltiples argumentos

Multiprocesamiento de Python con matrices y múltiples argumentos

TOP Lista

CalienteEtiquetas

Archivo