Procesos (Python🐍)
Como vengo hablando (o escribiendo) en notas anteriores, los procesos cumplen la función de ejecutar tareas o acciones en paralelo. Algo completamente distinto a lo que hacen los Threads.
(Anteriormente veniamos trabajando con el modulo logging el cúal contiene metodos muy utiles para trabajar con procesos y con Threads )
Ahora definimos una tarea que se ejecute de forma concurrente o paralela. Esta ultima dependiendo de si contamos con un equipo con multi-procesadores.
import time
import logging
import multiprocessing
logging.basicConfig(level=logging.DEBUG, format='%(message)s')
def nuevo_proceso():
logging.info('Hola Soy Un Nuevo Proceso')
# >> Hola Soy Un Nuevo Proceso
time.sleep(30)
# Mandamos a dormir el proceso
logging.info('Lo siento, me dormi')
# >> Lo siento, me dormi
if __name__ == '__main__':
proceso = multiprocessing.Process(target=nuevo_proceso)
proceso.start()
1.-
import multiprocessing
Lo principal para trabajar con procesos es importar el modulo que lo contiene.
2.- proceso = multiprocessing.Process(target=nuevo_proceso)
Creamos el objeto a partir de la clase Process para luego asignarlo a la variable proceso.
La clase Process recibe como parametro un target el cual recibira la función que queremos que se ejecute en nuestro proceso.
3.- proceso.start()
Usamos el metodo start para arrancar nuestro proceso!✨
La salida de esto es:
¿Como verificamos si esta corriendo en multiple procesadores?🤔
(Mirese el porque del time.sleep(30)
, el cual nos manda a dormir el proceso por 30 segundos)
En estos 30 segundos que nuestro proceso duerme verificaremos si es que se ejecutan en multiples procesos.
Tipeamos en nuestra terminal el comando ps, el cual nos mostrara los procesos en ejecucion:
Como observamos hay dos procesos de Python ejecutandose, uno constituye al padre (248) y el proceso hijo (249).
El proceso padre corresponde a la ejecución del codigo, el script 1.-process.py (el nombre del archivo en ejecución).
Por otro lado el proceso hijo se constituye de la creación del proceso y su ejecución dentro del script para realizar la definida tarea (lo que seria, ejecutar la funcion nuevo_proceso
)