Programacin Concurrente en Python Rogelio Ferreira Escutia Tcnicas

  • Slides: 39
Download presentation
“Programación Concurrente en Python” Rogelio Ferreira Escutia

“Programación Concurrente en Python” Rogelio Ferreira Escutia

Técnicas para Programación Concurrente

Técnicas para Programación Concurrente

Técnicas Clásicas Serial. Técnicas Concurrentes Hilos. Procesos. Paralelismo. Distribución. . 3

Técnicas Clásicas Serial. Técnicas Concurrentes Hilos. Procesos. Paralelismo. Distribución. . 3

Programación Serial

Programación Serial

Serial Ejecución de tareas en serie: "Advanced Guide to Python 3 Programming", John Hunt,

Serial Ejecución de tareas en serie: "Advanced Guide to Python 3 Programming", John Hunt, Springer Nature Switzerland AG 2019 5

Programación Concurrente

Programación Concurrente

Concurrente Ejecución de tareas de manera concurrente: "Advanced Guide to Python 3 Programming", John

Concurrente Ejecución de tareas de manera concurrente: "Advanced Guide to Python 3 Programming", John Hunt, Springer Nature Switzerland AG 2019 7

Serial vs. Concurrente Comparación en tiempo: "High Performance Python", Micha Gorelick & Ian Ozsvald,

Serial vs. Concurrente Comparación en tiempo: "High Performance Python", Micha Gorelick & Ian Ozsvald, O'Reilly Media, Sebastopol California USA 2014 8

Programación con Hilos

Programación con Hilos

Hilos - características Son parte de un proceso en ejecución. Se les conoce como

Hilos - características 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. "Advanced Guide to Python 3 Programming", John Hunt, Springer Nature Switzerland AG 2019 10

Pasos para programar hilos Importar biblioteca (thread). Definir el código que ejecutará el hilo

Pasos para programar hilos 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). "Advanced Guide to Python 3 Programming", John Hunt, Springer Nature Switzerland AG 2019 11

Hilos “Hola Mundo!” utilizando un hilo: . 12

Hilos “Hola Mundo!” utilizando un hilo: . 12

Hilos “Hola Mundo!” utilizando 3 hilos: . 13

Hilos “Hola Mundo!” utilizando 3 hilos: . 13

Estados de un hilo Un-Started: Ya está definido el hilo pero no está en

Estados de un hilo 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. "Advanced Guide to Python 3 Programming", John Hunt, Springer Nature Switzerland AG 2019 14

Estados de un hilo "Advanced Guide to Python 3 Programming", John Hunt, Springer Nature

Estados de un hilo "Advanced Guide to Python 3 Programming", John Hunt, Springer Nature Switzerland AG 2019 15

Variables globales Los variables que usa cada hilo, son variables locales, es decir, otro

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. . 16

Variables globales . 17

Variables globales . 17

Programación con Procesos

Programación con Procesos

Procesos - características Son ejecuciones de código independientes. Tienen su propio direccionamiento de memoria.

Procesos - características 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. "Advanced Guide to Python 3 Programming", John Hunt, Springer Nature Switzerland AG 2019 19

Procesamiento Cola de de tareas en un procesador: "Programación concurrente", http: //ferestrepoca. github. io/paradigmas-deprogramacion/progconcurrente/concurrente_teoria/index.

Procesamiento Cola de de tareas en un procesador: "Programación concurrente", http: //ferestrepoca. github. io/paradigmas-deprogramacion/progconcurrente/concurrente_teoria/index. html, abril 2020 20

Hilos y Procesos Diferentes formas de programar: "Programación concurrente", http: //ferestrepoca. github. io/paradigmas-deprogramacion/progconcurrente/concurrente_teoria/index. html,

Hilos y Procesos Diferentes formas de programar: "Programación concurrente", http: //ferestrepoca. github. io/paradigmas-deprogramacion/progconcurrente/concurrente_teoria/index. html, abril 2020 21

Métodos usados en Procesos start(): Arranca un proceso y sólo pueden ser invocados una

Métodos usados en Procesos 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. "Advanced Guide to Python 3 Programming", John Hunt, Springer Nature Switzerland AG 2019 22

Procesos – Hola Mundo (1) Importar la librería para uso de procesos: . 23

Procesos – Hola Mundo (1) Importar la librería para uso de procesos: . 23

Procesos – Hola Mundo (2) Definir el código (función) que ejecutará nuestro proceso quer

Procesos – Hola Mundo (2) Definir el código (función) que ejecutará nuestro proceso quer recibirá como parámetro el número del proceso: . 24

Procesos – Hola Mundo (3) Definir el inicio del código del programa principal. Esto

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. . 25

Procesos – Hola Mundo (4) Definir el código del programa principal. Crear el proceso.

Procesos – Hola Mundo (4) Definir el código del programa principal. Crear el proceso. Arrancar el proceso. . 26

Procesos – Hola Mundo (5) Programa completo: . 27

Procesos – Hola Mundo (5) Programa completo: . 27

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

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 28

Intercambio de datos en procesos Conexión entre 2 procesos: "Advanced Guide to Python 3

Intercambio de datos en procesos Conexión entre 2 procesos: "Advanced Guide to Python 3 Programming", John Hunt, Springer Nature Switzerland AG 2019 29

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

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

Programación Paralela

Programación Paralela

Comparación Concurrencia vs. Paralelismo: "Programación concurrente", http: //ferestrepoca. github. io/paradigmas-deprogramacion/progconcurrente/concurrente_teoria/index. html, abril 2020 32

Comparación Concurrencia vs. Paralelismo: "Programación concurrente", http: //ferestrepoca. github. io/paradigmas-deprogramacion/progconcurrente/concurrente_teoria/index. html, abril 2020 32

Comparación Concurrencia vs. Paralelismo: "Mastering Python High Performance", Fernando Doglio, Packt Publishing Birmingham UK

Comparación Concurrencia vs. Paralelismo: "Mastering Python High Performance", Fernando Doglio, Packt Publishing Birmingham UK 2015 33

Tareas que se pueden paralelizar Motores de búsqueda. Procesamiento de imágenes. "Advanced Guide to

Tareas que se pueden paralelizar Motores de búsqueda. Procesamiento de imágenes. "Advanced Guide to Python 3 Programming", John Hunt, Springer Nature Switzerland AG 2019 34

Programación paralela Una misma tarea dividida en pequeñas sub-tareas: "Advanced Guide to Python 3

Programación paralela Una misma tarea dividida en pequeñas sub-tareas: "Advanced Guide to Python 3 Programming", John Hunt, Springer Nature Switzerland AG 2019 35

Programación Distribuida

Programación Distribuida

Programación Distribuida Usando nodos reales y virtuales en una Grid Computing: "Advanced Guide to

Programación Distribuida Usando nodos reales y virtuales en una Grid Computing: "Advanced Guide to Python 3 Programming", John Hunt, Springer Nature Switzerland AG 2019 37

Programación Distribuida Un cliente envía una tarea a la Grid: "Advanced Guide to Python

Programación Distribuida Un cliente envía una tarea a la Grid: "Advanced Guide to Python 3 Programming", John Hunt, Springer Nature Switzerland AG 2019 38

Rogelio Ferreira Escutia Instituto Tecnológico de Morelia Departamento de Sistemas y Computación Correo: rogelio@itmorelia.

Rogelio Ferreira Escutia Instituto Tecnológico de Morelia Departamento de Sistemas y Computación Correo: rogelio@itmorelia. edu. mx rogeplus@gmail. com Página Web: http: //sagitario. itmorelia. edu. mx/~rogelio/ http: //www. xumarhu. net/ Twitter: Facebook: http: //twitter. com/rogeplus http: //www. facebook. com/groups/xumarhu. net/