Los subprocesos o hilos de
ejecución nos
permiten realizar tareas concurrentemente. En Python podemos utilizar el
módulo threading
,
aunque hay muchos otros.
Vamos a crear varios subprocesos (threads) sencillos.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import threading
import time
import random
def sleeper(name, s_time):
print('{} iniciado a las {}.'.format(
name, time.strftime('%H:%M:%S', time.gmtime())))
time.sleep(s_time)
print('{} finalizado a las {}.'.format(
name, time.strftime('%H:%M:%S', time.gmtime())))
for i in range(5):
thread = threading.Thread(target=sleeper, args=(
'Proceso ' + str(i + 1), random.randint(1, 9)))
thread.start()
print('Yo he terminado, pero los otros subprocesos no.')
Primero, hemos importado los modulos necesarios: time
, random
y
threading
. Para crear threads solo necesitamos el último. time
lo
hemos utilizado para simular una tarea y obtener su tiempo de inicio y
fin; random
, para hacer que nuestro proceso tenga una duración
aleatoria.
La función sleeper «duerme» (no hace nada) durante el tiempo que le
especifiquemos, nos dice cuándo ha empezado a «dormir» y cuando ha
terminado de «dormir». Como parámetros le pasamos el nombre que le
queremos dar al subproceso y el tiempo que va a «dormir» la función.
Luego, creamos un bucle for que crea 5 subprocesos que ejecutan la
función sleeper
. En el constructor (threading.Thread
), debemos
indicar la función a ejecutar (target=sleeper
) y los parámetros que
queremos pasarle
(args=('Proceso ' + str(i + 1), random.randint(1, 9)
).
Proceso 1 iniciado a las 21:19:23.
Proceso 2 iniciado a las 21:19:23.
Proceso 3 iniciado a las 21:19:23.
Proceso 4 iniciado a las 21:19:23.
Proceso 5 iniciado a las 21:19:23.
Yo he terminado, pero los otros subprocesos no.
Proceso 1 finalizado a las 21:19:25.
Proceso 5 finalizado a las 21:19:26.
Proceso 4 finalizado a las 21:19:27.
Proceso 2 finalizado a las 21:19:32.
Proceso 3 finalizado a las 21:19:32.
El resultado de la ejecución es aleatorio: no sabemos cuál proceso
finalizará primero.