Reducción de la prioridad del proceso de multiprocesamiento. Uso en Windows.

Uso multiprocessing.Pool() para paralelizar un procesamiento pesado de Pandas pero encuentro que es un poco demasiado exitoso. Mi uso de la CPU llega al 100% y toda mi computadora deja de responder. Incluso el ratón se vuelve difícil de usar.

Puedo cambiar la prioridad de proceso de mi proceso con este código.

 import psutil p = psutil.Process(os.getpid()) p.nice = psutil.BELOW_NORMAL_PRIORITY_CLASS 

Sin embargo, cuando busco en el Administrador de tareas de Windows, encuentro que solo el proceso principal de python.exe se ha cambiado por debajo de la prioridad normal.

¿Hay una buena manera de reducir la prioridad de los procesos del grupo?

Puede intentar establecer la prioridad de los hijos de su proceso una vez que los haya generado. Algo como:

 import psutil # spawn children and/or launch process pool here parent = psutil.Process() parent.nice(psutil.BELOW_NORMAL_PRIORITY_CLASS) for child in parent.children(): child.nice(psutil.BELOW_NORMAL_PRIORITY_CLASS) 

El mismo resultado que con el uso de la respuesta de @Giampaolo Rodolà se logra simplemente al establecer la prioridad del proceso padre antes de engendrar los hijos:

 import psutil parent = psutil.Process() parent.nice(psutil.BELOW_NORMAL_PRIORITY_CLASS) # the rest of your code 

Los procesos hijos heredarán la prioridad del padre. Sin embargo, si el padre debe configurarse con una prioridad diferente a la del niño, entonces se necesita el código provisto por @Giampaolo Rodolà.