preloader

1 de enero de 1 | 2 minutos de lectura
Índice de contenido

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

El modelo AR de series temporales univariadas

Resumen: En esta entrada, descubrirá el modelo AR: El modelo autorregresivo.

Leer más

Evaluación de modelos para pronosticar

Resumen: Al desarrollar modelos de aprendizaje automático, generalmente se comparan varios modelos durante la fase de construcción.

Leer más

Modelos para pronosticar

Resumen: El pronóstico, traducido groseramente como la tarea de predecir el futuro, ha estado presente en la sociedad humana durante siglos.

Leer más