Estoy ejecutando varias terminales cmds
usando subprocesos en Python (no te burles de mí, hay una razón).
Estos cmds
a veces superan la memoria disponible y me he visto obligado a aumentar el tamaño de mi intercambio para evitar errores de falta de memoria (OOA).
Mi pregunta es:En general, ¿mi programa (o cualquier otro) se completará más rápido al reducir los subprocesos y aumentar el espacio de intercambio o al aumentar los subprocesos y reducir el espacio de intercambio (o existe un "punto óptimo")?.
Respuesta1
Estos cmds a veces superan la memoria disponible y me he visto obligado a aumentar el tamaño de mi intercambio para evitar errores de falta de memoria (OOA).
Quedarse sin espacio de intercambio (o tener que aumentar el tamaño de intercambio) me indica que estás ejecutando demasiados procesos a la vez.
Mi pregunta es: en general, ¿mi programa (o cualquier otro) se completará más rápido al reducir los subprocesos y aumentar el espacio de intercambio o al aumentar los subprocesos y reducir el espacio de intercambio (o existe un "punto óptimo")?
Las dos opciones realmente no tienen sentido. Si aumenta la cantidad de subprocesos (y, por lo tanto, la RAM requerida) y al mismo tiempo reduce el tamaño de su intercambio, probablemente se quedará sin memoria (almacenada tanto en la RAM como en el intercambio), lo que provocará que su sistema operativo finalice los procesos y /o la asignación de memoria falla.
Quedarse sin RAM hace que su sistema operativo libere algo escribiendo memoria en el disco (espacio de intercambio). Esta es una tarea que requiere relativamente tiempo, por lo que realmente deseas evitar usar más memoria de la que tienes disponible en tu RAM.
Limitaría la cantidad de procesos para que no te quedes sin RAM, para evitar escribir memoria en el disco. Verifique la memoria disponible psutil.virtual_memory().available
antes de iniciar otro proceso. Tener 1 GB antes de empezar otro parece razonable.
Debería realizar algunas evaluaciones comparativas: calcular cuánto tiempo lleva completar una variedad de archivos fuente diferentes, con diferentes valores para los procesos máximos y la memoria mínima antes de iniciar otro.