Ejemplo # 1: Ejecución de script de hilo de Python utilizando el tiempo de espera de adquisición () bloqueo.
Discutiremos el uso del método "adquirir ()" del bloqueo en este ejemplo. El método "adquirir ()" se puede usar para bloquear. No se pueden hacer más esfuerzos para lograr esto hasta que se haya lanzado la cerradura una vez que un hilo ha cerrado la cerradura. El método "adquirir ()" se puede usar para asegurar un bloqueo. Una vez que un hilo ha asegurado el bloqueo, no se pueden hacer más intentos para hacerlo hasta que se haya liberado el bloqueo. La opción "Tiempo de espera" también se utilizará en este caso del método "adquirir ()" para especificar cuánto tiempo se retrasará el hilo de llamadas si otra operación ya está intentando obtener el bloqueo. Si el valor potencial del hilo es 1, que es 1, el hilo se retrasará indefinidamente hasta que adquiera el bloqueo. Aquí, usamos esto para determinar cuánto tiempo buscará un hilo de un bloqueo.
Comencemos a implementar el script utilizando la herramienta "Spyder" para implementar el código. Primero vamos a importar bloqueo y hilo de la biblioteca de pithon enhebring. Los hilos se utilizan en un proceso de Python para llevar a cabo la ejecución del código. Cada programa tiene un hilo de forma predeterminada, pero es posible que necesitemos producir más hilos si queremos hacer varios procesos simultáneamente. El módulo de sueño se importa luego. El método "Sleep ()" en el módulo de tiempo de Python se utiliza para detener la ejecución de un programa para una cantidad de tiempo predeterminada. Esto sugiere que el programa se suspende temporalmente antes de ser ejecutado automáticamente después de un período predeterminado. A continuación, se utiliza el método "Lock ()". Luego, en la siguiente línea, definimos una función con el nombre "func1" y pasamos la variable "bloqueo" en sus paréntesis.
La declaración "IF" permite la ejecución de una declaración o conjunto de declaraciones en circunstancias específicas basadas en el resultado de una expresión. Usamos el método "adquirir ()" en el objeto de bloqueo dentro de la condición "si" para que el hilo espere continuamente el bloqueo. Pasamos un tiempo de espera como uno de sus parámetros y lo establecemos en "10" en las paréntesis de la función "adquirir ()". Ahora, si la declaración satisface el requisito, usamos la función "print ()", que pasa la declaración "Hilo 2: hecho" en sus paréntesis, y luego llamamos al método de lanzamiento () en un módulo de objeto de bloqueo de bloqueo. Si el bloqueo está bloqueado, este proceso reaccionará después de volver a su estado desbloqueado.
Además, este método puede llamarse por cualquier hilo. Está permitido para uno de los hilos que ya están esperando adquirir la bodega para aferrarse a él hasta que se llame a esta función. Ahora imprimemos la declaración "Hilo 1: Tiempo de espera" si no se cumple la condición. Ahora construiremos una nueva función con el nombre "func" y el bloqueo de parámetros en la siguiente línea. Luego, usando el objeto de bloqueo, ejecutamos el método "adquirir ()". En la siguiente línea, luego llamamos a la función "print ()" y proporcionamos la declaración "Hilo 1: hecho" antes de usar el método "Release ()" con el bloqueo.
Ahora crearemos un hilo y llamaremos a los métodos del hilo llamando al objeto de hilo. Utilizamos un hilo y establecimos "Target = func" dentro de él, pasando el argumento "Bloquear",. Luego, guardamos este hilo en una variable llamada "Thread1."En la siguiente línea, llamamos" func1 "con el hilo y pasamos el argumento" bloqueo ", usando" hilo1.iniciar () "para iniciar el hilo. Hicimos lo mismo para Thread2. El método "unir ()" se usa para esperar la ejecución de los hilos. Por lo tanto, tenemos dos hilos, cada uno de los cuales llama dos rutinas distintas. El tiempo de espera para el segundo hilo es "10" segundos, mientras que el primer hilo funciona para "2" segundos.
La pantalla de salida ahora muestra que el subproceso 1 se realiza primero ya que se generó primero y pudo acceder al bloqueo y finalizar su ejecución. El hilo 2 está terminado porque el tiempo de espera se estableció en "10" segundos, como se puede ver.
Ejemplo # 2: Uso del bloqueo de hilo de Python en una condición de carrera
Usaremos el bloqueo de subprocesos de Python en una condición de carrera en este ejemplo. Una condición de carrera ocurre cuando dos hilos miran una variable compartida simultáneamente. Los hilos iniciales y segundos recibieron el mismo resultado de la constante del hilo original. Luego, los dos hilos intentan cambiar el valor común de la variable dependiente. Los datos del hilo que se suman a la lista de variables compartidas se mantienen porque borra el valor que escribió el hilo anterior.
Comencemos a implementar el código. En la primera línea, importamos el módulo de bloqueo desde el módulo de roscado. Y en la siguiente línea, importamos el módulo de tiempo. Luego, creamos una variable y le damos el valor "20". En la siguiente línea, creamos una función llamada "func1" y pasamos dos variables "incremento" y "bloqueo" como parámetros. Creamos una variable global llamada "A" y lo pasamos un bloqueo.
Finalmente, en la siguiente línea, creamos una variable llamada "local_counter" y la pasamos a ella. El valor de este "contador local" se incrementa en la siguiente línea, dependiendo de qué hilo finalice el hilo. Entonces, llamamos el "tiempo.método sleep () "y proporcionar un período de" 0.5 "segundos en la siguiente línea. Luego se ejecuta el método "print ()" y el contador local se guarda en la variable "a". Dentro de esta función, el hilo actual se llama mediante el uso de "subprocesos.actual_thread ().incrementos de nombre A por incremento "y pasa el" A "en el que se almacena el valor y el método" Release () "con bloqueo se llama en la siguiente línea. En la siguiente línea, pasamos el método Lock ().
Ahora, vamos a crear dos hilos y llamar a la función usando los hilos. Llamamos a la función en el primer hilo utilizando subprocesos.hilo, usado "Target = func1", y pase el argumento "15" como su incremento y "bloqueo". Almacenamos este primer hilo en la variable "T1" y luego repetimos el mismo procedimiento para el hilo 2, pero pasamos el argumento, que es el incremento de "5" y "bloqueo". Entonces, usamos "hilo.inicio () "para iniciar el hilo y" unirse () "para esperar a que el hilo termine de correr. El valor final se mostrará entonces.
Ahora, simplemente coloque este código hace que ambos hilos lean el valor que hemos compartido. "T1" y "T2" intentarán alterar el valor de "A" en la función de incremento utilizando los valores de incremento "15" y "5" que se proporciona en la tupla de parámetros.
Ahora, muestra el resultado final "40" en la salida. Como tenemos "a = 20" en el código anterior, cuando "hilo 1" aumenta en "15", el resultado es "35" y el valor cambia a "35", sin embargo, cuando "hilo 2" aumenta en "5" El resultado es "40".
Conclusión
La función de bloqueo de subprocesos de Python que tiene dos métodos: adquirir () y la liberación () se cubre en este artículo. Se presentan dos ejemplos en esta guía. En primera instancia, hemos usado un tiempo de espera en un bloqueo adquirir (), y en el segundo ejemplo, hemos usado una condición de carrera usando Python Lock () para mostrar cómo afecta cómo funcionan los subprocesos. Anticipamos que encontrará útiles estos casos cuando use cerraduras de hilos de Python.