Bloqueo de multiprocesamiento de Python

Bloqueo de multiprocesamiento de Python

El paquete de multiprocesamiento de Python permite a los usuarios crear nuevos procesos y acceder a la API de Python. Si alguna vez has jugado con el módulo de subproceso, esto es muy comparable. El rendimiento de la tarea múltiple es necesario. Debemos importar el módulo de multiprocesamiento en el script de Python para realizar operaciones de multiprocesamiento. Cuando dos procesos o subprocesos intentan acceder a un recurso compartido como archivos de memoria u otros datos, puede causar problemas en el mundo de la programación. Por lo tanto, necesitamos asegurar ese acceso usando un bloqueo. Compartir la memoria y los accesorios principales permiten que las unidades de procesamiento ejecutaran los programas simultáneamente.

La aplicación de multiprocesamiento se divide en unidades más pequeñas y funciona por separado. El sistema operativo asigna un procesador a cada proceso. Para evitar que otro proceso ejecute una función equivalente hasta que se libere el bloqueo, utilizamos la clase de bloqueo de multiprocesamiento para obtener un bloqueo en el proceso. La clase de bloqueo realiza principalmente dos funciones. El método adquirir () se utiliza para obtener primero un bloqueo, mientras que la función de lanzamiento () se usa para liberar el bloqueo.

Implementación de Python del bloqueo () en multiprocesamiento

En este ejemplo, construimos un bloqueo y luego usamos el módulo de multiprocesamiento para usar el método Lock () después de crear dos procesos. Podemos generar y mantener las nuevas tareas infantiles en Python utilizando el paquete de multiprocesamiento. El componente de multiprocesamiento facilita la creación de los procesos utilizando una interfaz que es similar al componente de roscado. El módulo de multiprocesamiento admite la concurrencia local y global utilizando piezas individuales en lugar de hilos, eliminando el bloqueo de interpretación global. Python tiene un bloqueo mutex que se puede usar con múltiples procesos a la vez.cerradura de clase. Los procesos pueden construir, adquirir y luego liberar un objeto del bloqueo antes de acceder a un área vital.

Comencemos ahora a implementar el código para ejecutar el script de multiprocesamiento de Python. "Spyder" también se está utilizando. Primero importamos el módulo de multiprocesamiento. Debemos importar el módulo de multiprocesamiento ya que debemos crear un proceso en el script. Después de eso, creamos una función definida por el usuario llamada "función" y le pasamos el argumento de "bloqueo" en la línea que sigue. El método adquirir () luego se llama con la frase "bloqueo" que proporciona una autoridad de hilo sobre un bloqueo. Un hilo bloquea hasta que el otro hilo deja caer la cerradura si intenta adquirir uno que ya está siendo sostenido por otro hilo. En ese momento, compite con cualquier otro hilo que busca tomar el bloqueo. Un hilo a la vez solo puede poseer la cerradura. La declaración de "sección importante" se pasa como entrada cuando llamamos a la "impresión ()" en el siguiente paso.

Luego, en el paso posterior, llamamos a la función "print ()" una vez más, pasando la frase "solo puede haber un proceso a la vez" antes de llamar a la función "liberar ()" con el "bloqueo". Cuando se realiza de esta manera, el bloqueo siempre se libera incluso si hay un error o error dentro de la región crucial, definiendo claramente el principio y el final del código protegido.

Ahora que definimos una función con el nombre "Función Ejecutar", pasamos a la siguiente fase donde creamos un proceso y luego la llamamos usando el módulo "Lock ()". Lo mantenemos en el parámetro de bloqueo y usamos "multiprocesamiento.bloquear () "para llamar al bloqueo con el proceso. Ahora que creamos el proceso 1, usamos "multiprocesamiento.proceso ”para llamar a la función en ese proceso. También pasamos el bloqueo de argumentos a la función utilizando el "argumento" = "bloqueo" y almacenando el proceso 1 en la variable "p1".

Luego, en el siguiente paso, usamos "multiprocesamiento.proceso "para ejecutar la función en el proceso 2 y pasar la" función de destino = "mientras la almacena en la variable" p2 ". Luego se inicia el proceso utilizando la función "Start ()" con "P1" y "P2". En el siguiente paso, usamos "unir ()" con "P1" y "P2" para esperar a que termine la ejecución del proceso. A continuación, empleamos el "if name = main_", que es esencialmente un punto de entrada. La "función run ()" se invoca al final.


Para lograr esto, el proceso primero debe adquirir el bloqueo antes de ejecutar la parte esencial. Cuando se termina la fase crítica de la tarea, el proceso debe eliminar el bloqueo. Se mostraron tanto los dos procesos como sus declaraciones. Solo podría haber una sola tarea ejecutada a la vez presentada después de la "sección crítica."


Ahora tenemos otro ejemplo de bloqueo de multiprocesamiento de Python. Comencemos importando "Sleep" desde el módulo de tiempo antes de importar "aleatorio" desde el módulo aleatorio. Los enteros se generan aleatoriamente utilizando un programa Python llamado Python Random. Porque son pseudo-aleatorios, estos números no son realmente aleatorios. Puede usar este paquete para realizar otras operaciones aleatorias, imprimir un número aleatorio para una lista o cadena, y generar los números aleatorios.

A continuación, importamos el proceso desde el multiprocesamiento en la siguiente línea. El bloqueo se importa desde el multiprocesamiento. La función "func" se define con los argumentos de "bloqueo", "identificador" y "val" que se están pasando. A continuación, usamos un bloqueo para obtener el bloqueo. Esta parte crucial implica informar un mensaje y bloquear un segundo mensaje.

Como resultado, ejecutamos el método print () dentro del bloqueo, pasando la declaración junto con las llamadas "Identificador" y "Val". El método "Sleep ()" se usa para detener la ejecución por un número establecido de segundos. Luego llamamos "val" dentro de sus paréntesis. El bloqueo compartido se establece utilizando el método "Lock ()" y se guarda en la variable "Lock" recién creada cuando utilizamos la condición "if name = main_". A continuación, usamos el método Process () para crear un proceso, pasando el "Target = func" para llamar a la función al proceso junto con el argumento "Bloquear", el número construido "X" y el "Random ()" función. Este bucle termina después de completar sus iteraciones "15". Guardamos este proceso en la variable "P".

Aquí, también establecemos el rango utilizando "para" y establecer el rango en "15". El proceso ahora comienza llamando al "proceso.comenzar()". Luego, llamamos al proceso con el método "unir ()" para esperar la ejecución.


Cuando se ejecuta el ejemplo, se inician quince procesos y cada uno está configurado para usar nuestra función personalizada. Después de eso, el proceso principal espera a que cada uno de los procesos infantiles se complete antes de lanzarlos. Cada proceso de niño en el método function () intenta agarrar el bloqueo. El bloqueo solo se puede obtener mediante un proceso a la vez. Cuando eso sucede, envían un mensaje que incluye su identidad y cuánto tiempo planean dormir, así como el índice está fuera de servicio porque se muestra en la salida tan pronto como se termine la operación.

Conclusión

Aprendimos sobre el bloqueo de multiprocesamiento de Python en este artículo. El bloqueo es un concepto fundamental en la teoría del multiprocesamiento y del sistema operativo. En la primera sección del ejemplo, creamos dos procesos usando un bloqueo y los llamamos usando un bloqueo para ejecutar la función que definimos. En la siguiente sección del código, utilizamos el bucle for-loop y establecimos el rango en "15" para ejecutar el proceso. El proceso termina una vez que completa sus "15" iteraciones. En la segunda sección, también utilizamos la técnica "Sleep ()" para retrasar la ejecución por un corto tiempo.