39
“Programación Concurrente en Python” Rogelio Ferreira Escutia

“Programación Concurrente en Python”sagitario.itmorelia.edu.mx/~rogelio/python_programacion...14 Estados de un hilo "Advanced Guide to Python 3 Programming", John Hunt, Springer

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: “Programación Concurrente en Python”sagitario.itmorelia.edu.mx/~rogelio/python_programacion...14 Estados de un hilo "Advanced Guide to Python 3 Programming", John Hunt, Springer

“Programación Concurrente en Python”

Rogelio Ferreira Escutia

Page 2: “Programación Concurrente en Python”sagitario.itmorelia.edu.mx/~rogelio/python_programacion...14 Estados de un hilo "Advanced Guide to Python 3 Programming", John Hunt, Springer

Técnicas para Programación Concurrente

Page 3: “Programación Concurrente en Python”sagitario.itmorelia.edu.mx/~rogelio/python_programacion...14 Estados de un hilo "Advanced Guide to Python 3 Programming", John Hunt, Springer

3

Técnicas Clásicas

.

Serial.

Técnicas Concurrentes Hilos.

Procesos.

Paralelismo.

Distribución.

Page 4: “Programación Concurrente en Python”sagitario.itmorelia.edu.mx/~rogelio/python_programacion...14 Estados de un hilo "Advanced Guide to Python 3 Programming", John Hunt, Springer

Programación Serial

Page 5: “Programación Concurrente en Python”sagitario.itmorelia.edu.mx/~rogelio/python_programacion...14 Estados de un hilo "Advanced Guide to Python 3 Programming", John Hunt, Springer

5

Serial

"Advanced Guide to Python 3 Programming", John Hunt, Springer Nature Switzerland AG 2019

Ejecución de tareas en serie:

Page 6: “Programación Concurrente en Python”sagitario.itmorelia.edu.mx/~rogelio/python_programacion...14 Estados de un hilo "Advanced Guide to Python 3 Programming", John Hunt, Springer

Programación Concurrente

Page 7: “Programación Concurrente en Python”sagitario.itmorelia.edu.mx/~rogelio/python_programacion...14 Estados de un hilo "Advanced Guide to Python 3 Programming", John Hunt, Springer

7

Concurrente

"Advanced Guide to Python 3 Programming", John Hunt, Springer Nature Switzerland AG 2019

Ejecución de tareas de manera concurrente:

Page 8: “Programación Concurrente en Python”sagitario.itmorelia.edu.mx/~rogelio/python_programacion...14 Estados de un hilo "Advanced Guide to Python 3 Programming", John Hunt, Springer

8

Serial vs. Concurrente

"High Performance Python", Micha Gorelick & Ian Ozsvald, O'Reilly Media, Sebastopol California USA 2014

Comparación en tiempo:

Page 9: “Programación Concurrente en Python”sagitario.itmorelia.edu.mx/~rogelio/python_programacion...14 Estados de un hilo "Advanced Guide to Python 3 Programming", John Hunt, Springer

Programación con Hilos

Page 10: “Programación Concurrente en Python”sagitario.itmorelia.edu.mx/~rogelio/python_programacion...14 Estados de un hilo "Advanced Guide to Python 3 Programming", John Hunt, Springer

10

Hilos - características

"Advanced Guide to Python 3 Programming", John Hunt, Springer Nature Switzerland AG 2019

Son parte de un proceso en ejecución.

Se les conoce como procesos ligeros, ya que no tienen su propio direccionamiento de memoria.

Pueden ser interrumpidos en su ejecución.

Los hilos pueden compartir datos entre ellos de manera directa.

La mayoría de los sistemas operativos no los considera como un entidad separada.

Page 11: “Programación Concurrente en Python”sagitario.itmorelia.edu.mx/~rogelio/python_programacion...14 Estados de un hilo "Advanced Guide to Python 3 Programming", John Hunt, Springer

11

Pasos para programar hilos

"Advanced Guide to Python 3 Programming", John Hunt, Springer Nature Switzerland AG 2019

Importar biblioteca (thread).

Definir el código que ejecutará el hilo (funciones)

Crear nuestro hilo (instanciar objeto de tipo thread) y definir su código de ejecución “target”).

Arrancar el hilo (start).

Page 12: “Programación Concurrente en Python”sagitario.itmorelia.edu.mx/~rogelio/python_programacion...14 Estados de un hilo "Advanced Guide to Python 3 Programming", John Hunt, Springer

12

Hilos

.

“Hola Mundo!” utilizando un hilo:

Page 13: “Programación Concurrente en Python”sagitario.itmorelia.edu.mx/~rogelio/python_programacion...14 Estados de un hilo "Advanced Guide to Python 3 Programming", John Hunt, Springer

13

Hilos

.

“Hola Mundo!” utilizando 3 hilos:

Page 14: “Programación Concurrente en Python”sagitario.itmorelia.edu.mx/~rogelio/python_programacion...14 Estados de un hilo "Advanced Guide to Python 3 Programming", John Hunt, Springer

14

Estados de un hilo

"Advanced Guide to Python 3 Programming", John Hunt, Springer Nature Switzerland AG 2019

Un-Started: Ya está definido el hilo pero no está en ejecución.

Runnable: Cuando se arrancó (start) y está en espera de ser llamado por el scheduler del sistema operativo.

Running: Hilo en ejecución.

Waiting: Cuando está en espera de que otro hilo termine su ejecución.

Dead: Cuando la ejecución del hilo ha terminado.

Page 15: “Programación Concurrente en Python”sagitario.itmorelia.edu.mx/~rogelio/python_programacion...14 Estados de un hilo "Advanced Guide to Python 3 Programming", John Hunt, Springer

15

Estados de un hilo

"Advanced Guide to Python 3 Programming", John Hunt, Springer Nature Switzerland AG 2019

Page 16: “Programación Concurrente en Python”sagitario.itmorelia.edu.mx/~rogelio/python_programacion...14 Estados de un hilo "Advanced Guide to Python 3 Programming", John Hunt, Springer

16

Variables globales

.

Los variables que usa cada hilo, son variables locales, es decir, otro hilo no puede conocer esa variable ni su contenido.

Para usar una variable como “global” es necesario declarar esa variable de manera normal pero dentro del programa principal, y al inicio de cada hilo que quiera accesar a la variable global tenemos que poner el prefijo “global” y luego el nombre de la variable.

De esta manera un hilo puede accesar y modificar una variable global.

Page 17: “Programación Concurrente en Python”sagitario.itmorelia.edu.mx/~rogelio/python_programacion...14 Estados de un hilo "Advanced Guide to Python 3 Programming", John Hunt, Springer

17

Variables globales

.

Page 18: “Programación Concurrente en Python”sagitario.itmorelia.edu.mx/~rogelio/python_programacion...14 Estados de un hilo "Advanced Guide to Python 3 Programming", John Hunt, Springer

Programación con Procesos

Page 19: “Programación Concurrente en Python”sagitario.itmorelia.edu.mx/~rogelio/python_programacion...14 Estados de un hilo "Advanced Guide to Python 3 Programming", John Hunt, Springer

19

Procesos - características

"Advanced Guide to Python 3 Programming", John Hunt, Springer Nature Switzerland AG 2019

Son ejecuciones de código independientes.

Tienen su propio direccionamiento de memoria.

Son independientes unos de otros.

Los procesos no comparten datos entre ellos de manera directa.

Page 20: “Programación Concurrente en Python”sagitario.itmorelia.edu.mx/~rogelio/python_programacion...14 Estados de un hilo "Advanced Guide to Python 3 Programming", John Hunt, Springer

20

Procesamiento

"Programación concurrente", http://ferestrepoca.github.io/paradigmas-de-programacion/progconcurrente/concurrente_teoria/index.html, abril 2020

Cola de de tareas en un procesador:

Page 21: “Programación Concurrente en Python”sagitario.itmorelia.edu.mx/~rogelio/python_programacion...14 Estados de un hilo "Advanced Guide to Python 3 Programming", John Hunt, Springer

21

Hilos y Procesos

"Programación concurrente", http://ferestrepoca.github.io/paradigmas-de-programacion/progconcurrente/concurrente_teoria/index.html, abril 2020

Diferentes formas de programar:

Page 22: “Programación Concurrente en Python”sagitario.itmorelia.edu.mx/~rogelio/python_programacion...14 Estados de un hilo "Advanced Guide to Python 3 Programming", John Hunt, Springer

22

Métodos usados en Procesos

"Advanced Guide to Python 3 Programming", John Hunt, Springer Nature Switzerland AG 2019

start(): Arranca un proceso y sólo pueden ser invocados una vez por proceso.

join([timeout]): Espera a que un proceso termine (si se ejecuta sin parámetros. Si en envía un “timeout” (opcional) entonces se espera la cantidad de segundos que se le indiquen.

is_alive(): Sirve para indentificar si un proceso sigue en funcionamiento.

Page 23: “Programación Concurrente en Python”sagitario.itmorelia.edu.mx/~rogelio/python_programacion...14 Estados de un hilo "Advanced Guide to Python 3 Programming", John Hunt, Springer

23

Procesos – Hola Mundo (1)

.

Importar la librería para uso de procesos:

Page 24: “Programación Concurrente en Python”sagitario.itmorelia.edu.mx/~rogelio/python_programacion...14 Estados de un hilo "Advanced Guide to Python 3 Programming", John Hunt, Springer

24

Procesos – Hola Mundo (2)

.

Definir el código (función) que ejecutará nuestro proceso quer recibirá como parámetro el número del proceso:

Page 25: “Programación Concurrente en Python”sagitario.itmorelia.edu.mx/~rogelio/python_programacion...14 Estados de un hilo "Advanced Guide to Python 3 Programming", John Hunt, Springer

25

Procesos – Hola Mundo (3)

.

Definir el inicio del código del programa principal.

Esto es un requisito para el uso de procesos.

Esto es importante si un programa va a ser llamado desde otro programa.

Page 26: “Programación Concurrente en Python”sagitario.itmorelia.edu.mx/~rogelio/python_programacion...14 Estados de un hilo "Advanced Guide to Python 3 Programming", John Hunt, Springer

26

Procesos – Hola Mundo (4)

.

Definir el código del programa principal.

Crear el proceso.

Arrancar el proceso.

Page 27: “Programación Concurrente en Python”sagitario.itmorelia.edu.mx/~rogelio/python_programacion...14 Estados de un hilo "Advanced Guide to Python 3 Programming", John Hunt, Springer

27

Procesos – Hola Mundo (5)

.

Programa completo:

Page 28: “Programación Concurrente en Python”sagitario.itmorelia.edu.mx/~rogelio/python_programacion...14 Estados de un hilo "Advanced Guide to Python 3 Programming", John Hunt, Springer

28

Intercambio de datos en procesos Los procesos son independientes entre sí y no

comparten datos entre ellos de manera directa (no hay memoria compartida).

Se requiere establecer una conexión entre procesos (pipe).

Una vez establecida la conexión entre procesos, la comunicación es dúplex (bidireccional).

"Advanced Guide to Python 3 Programming", John Hunt, Springer Nature Switzerland AG 2019

Page 29: “Programación Concurrente en Python”sagitario.itmorelia.edu.mx/~rogelio/python_programacion...14 Estados de un hilo "Advanced Guide to Python 3 Programming", John Hunt, Springer

29

Intercambio de datos en procesos Conexión entre 2 procesos:

"Advanced Guide to Python 3 Programming", John Hunt, Springer Nature Switzerland AG 2019

Page 30: “Programación Concurrente en Python”sagitario.itmorelia.edu.mx/~rogelio/python_programacion...14 Estados de un hilo "Advanced Guide to Python 3 Programming", John Hunt, Springer

30

Intercambio de datos en procesos Conexión entre 2 procesos:

.

Page 31: “Programación Concurrente en Python”sagitario.itmorelia.edu.mx/~rogelio/python_programacion...14 Estados de un hilo "Advanced Guide to Python 3 Programming", John Hunt, Springer

Programación Paralela

Page 32: “Programación Concurrente en Python”sagitario.itmorelia.edu.mx/~rogelio/python_programacion...14 Estados de un hilo "Advanced Guide to Python 3 Programming", John Hunt, Springer

32

Comparación

"Programación concurrente", http://ferestrepoca.github.io/paradigmas-de-programacion/progconcurrente/concurrente_teoria/index.html, abril 2020

Concurrencia vs. Paralelismo:

Page 33: “Programación Concurrente en Python”sagitario.itmorelia.edu.mx/~rogelio/python_programacion...14 Estados de un hilo "Advanced Guide to Python 3 Programming", John Hunt, Springer

33

Comparación

"Mastering Python High Performance", Fernando Doglio, Packt Publishing Birmingham UK 2015

Concurrencia vs. Paralelismo:

Page 34: “Programación Concurrente en Python”sagitario.itmorelia.edu.mx/~rogelio/python_programacion...14 Estados de un hilo "Advanced Guide to Python 3 Programming", John Hunt, Springer

34

Tareas que se pueden paralelizar

"Advanced Guide to Python 3 Programming", John Hunt, Springer Nature Switzerland AG 2019

Motores de búsqueda. Procesamiento de imágenes.

Page 35: “Programación Concurrente en Python”sagitario.itmorelia.edu.mx/~rogelio/python_programacion...14 Estados de un hilo "Advanced Guide to Python 3 Programming", John Hunt, Springer

35

Programación paralela

"Advanced Guide to Python 3 Programming", John Hunt, Springer Nature Switzerland AG 2019

Una misma tarea dividida en pequeñas sub-tareas:

Page 36: “Programación Concurrente en Python”sagitario.itmorelia.edu.mx/~rogelio/python_programacion...14 Estados de un hilo "Advanced Guide to Python 3 Programming", John Hunt, Springer

Programación Distribuida

Page 37: “Programación Concurrente en Python”sagitario.itmorelia.edu.mx/~rogelio/python_programacion...14 Estados de un hilo "Advanced Guide to Python 3 Programming", John Hunt, Springer

37

Programación Distribuida

"Advanced Guide to Python 3 Programming", John Hunt, Springer Nature Switzerland AG 2019

Usando nodos reales y virtuales en una Grid Computing:

Page 38: “Programación Concurrente en Python”sagitario.itmorelia.edu.mx/~rogelio/python_programacion...14 Estados de un hilo "Advanced Guide to Python 3 Programming", John Hunt, Springer

38

Programación Distribuida

"Advanced Guide to Python 3 Programming", John Hunt, Springer Nature Switzerland AG 2019

Un cliente envía una tarea a la Grid:

Page 39: “Programación Concurrente en Python”sagitario.itmorelia.edu.mx/~rogelio/python_programacion...14 Estados de un hilo "Advanced Guide to Python 3 Programming", John Hunt, Springer

Rogelio Ferreira Escutia

Instituto Tecnológico de MoreliaDepartamento de Sistemas y Computación

Correo: [email protected] [email protected]

Página Web: http://sagitario.itmorelia.edu.mx/~rogelio/http://www.xumarhu.net/

Twitter: http://twitter.com/rogeplusFacebook: http://www.facebook.com/groups/xumarhu.net/