preloader

1. Januar 1 | 2 minuten lesen
Inhaltsverzeichnis

de subprocesamiento importación Subproceso, Bloqueo clase SharedData (objeto): def init(uno mismo): valor propio = 0 self.bloquear = Bloquear() def read_value(self): intentar: print(‘read_value adquiriendo bloqueo’) self.lock.acquire() devolver valor propio finalmente: print(‘read_value liberando Lock’) self.lock.release() def cambio_valor(auto): print(‘cambiar_valor adquiriendo bloqueo’) con autobloqueo: valor propio = valor propio + 1 print(‘bloqueo de cambio_valor liberado’) La clase SharedData presentada anteriormente utiliza bloqueos para controlar el acceso a elementos críticos. bloques de código, específicamente a read_value() y change_value() métodos. El objeto Lock se mantiene internamente en el objeto ShareData y ambos Los métodos intentan adquirir el bloqueo antes de realizar su comportamiento, pero luego deben suelte el bloqueo después de su uso. El método read_value() hace esto explícitamente usando try: finalmente: bloques mientras que el método change_value() usa una declaración with (como el tipo de bloqueo admite el protocolo de administrador de contexto). Ambos enfoques logran el mismo resultado. pero el estilo de declaración with es más conciso. La clase SharedData se usa a continuación con dos funciones simples. En este caso el objeto SharedData se ha definido como una variable global, pero también podría se han pasado a las funciones reader() y updater() como argumento. Las funciones del lector y del actualizador se repiten, intentando llamar a read_value() y los métodos change_value() en el objeto shared_data. Como ambos métodos usan un bloqueo para controlar el acceso a los métodos, solo un hilo puede obtener acceso al área bloqueada a la vez. Esto significa que la función lector() puede comenzar a leer datos antes de que la función updater() haya cambiado los datos (o viceversa). Esto se indica mediante la salida donde el hilo del lector accede al valor ‘0’ dos veces antes de que el actualizador registre el valor ‘1’. Sin embargo, la función updater() se ejecuta una segunda vez antes de que el lector obtenga acceso al bloque de código bloqueado que es por qué se pierde el valor 2. Dependiendo de la aplicación, esto puede o no ser un problema. 384 32 Sincronización entre subprocesos/procesos

comments powered by Disqus

popular post

Temas de Pregrado en Ciencias de la Computación Guía avanzada a Python 3 Programación Juan caza

Weiterlesen

Temas de Pregrado en Ciencias de la Computación Guía avanzada a Python 3 Programación Juan caza

Weiterlesen

• https://docs.python.org/3/ El sitio principal de documentación de Python 3. Contiene tutoriales, referencias de bibliotecas, guías de configuración e instalación, así como Python cómo-tos • https://docs.

Weiterlesen